Trang chủ » Blog » Hướng dẫn về Spring Security và JWT (Phần 2)

Hướng dẫn về Spring Security và JWT (Phần 2)

bởi CodeGym | 06/12/2023 17:31 | Blog
  • JWT
  • Tạo file JwtRespone như sau:

  • JwtService
@Service

public class JwtService {

    private static final String SECRET_KEY = "11111111111111111111111111111111";

    private static final long EXPIRE_TIME = 86400000000L;

    private static final Logger logger = LoggerFactory.getLogger(JwtService.class.getName());



    public String generateTokenLogin(Authentication authentication) {

        UserPrinciple userPrincipal = (UserPrinciple) authentication.getPrincipal();



        return Jwts.builder()

                .setSubject((userPrincipal.getUsername()))

                .setIssuedAt(new Date())

                 .setExpiration(new Date((new Date()).getTime() + EXPIRE_TIME * 1000))

                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)

                .compact();

    }



    public boolean validateJwtToken(String authToken) {

        try {

            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(authToken);

            return true;

        } catch (SignatureException e) {

            logger.error("Invalid JWT signature -> Message: {} ", e);

        } catch (MalformedJwtException e) {

            logger.error("Invalid JWT token -> Message: {}", e);

        } catch (ExpiredJwtException e) {

            logger.error("Expired JWT token -> Message: {}", e);

        } catch (UnsupportedJwtException e) {

            logger.error("Unsupported JWT token -> Message: {}", e);

        } catch (IllegalArgumentException e) {

            logger.error("JWT claims string is empty -> Message: {}", e);

        }



        return false;

    }



    public String getUserNameFromJwtToken(String token) {



        String userName = Jwts.parser()

                .setSigningKey(SECRET_KEY)

                .parseClaimsJws(token)

                .getBody().getSubject();

        return userName;

    }

}
  • Cấu hình và phân quyền:
  • JwtAuthenticationFilter:
  • SecurityConfig:
-          @Configuration

@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean

    public UserService userService() {

        return new UserServiceImpl();

    }



    @Autowired

    private UserService userService;



    @Bean

    public JwtAuthenticationFilter jwtAuthenticationFilter() {

        return new JwtAuthenticationFilter();

    }



    @Bean(BeanIds.AUTHENTICATION_MANAGER)

    @Override

    public AuthenticationManager authenticationManager() throws Exception {

        return super.authenticationManager();

    }



    @Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder(10);

    }





    @Autowired

    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());

    }



    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().ignoringAntMatchers("/**");

        http.authorizeRequests()

                .antMatchers("/",

                        "/login").permitAll()

                .anyRequest().authenticated()

                .and().csrf().disable()

                .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));

        http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

        http.sessionManagement()

                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        http.cors();

    }

}
  • Tạo controller

  • Chạy thử:
  • Khi ứng dụng được chạy chúng ta bật postman lên rồi gửi request tới địa chỉ http://localhost:8080/login

  • Sau đó chúng ta nhấn send để lấy về mã jwt

  • Để truy cập được những trang web có bảo mật chúng ta cần copy đoạn access token trả về và làm như trong ảnh

  • Và sau đó ấn nút send để gửi lại request sau khi được thêm mã token

 

Author: Nguyễn Minh Quân

Đăng ký nhận bộ 150 thuật ngữ tiếng Anh chuyên ngành IT tại đây

Tìm hiểu thêm về mô hình đào tạo Coding Bootcamp tại đây

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

12 + 13 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM