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

29/04/2020 | Blog | 0 Lời bình

Trang chủ » Blog » Hướng dẫn về Spring Security và JWT (Phần 2)
  • 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

Tạo và sử dụng USER FUNCTION

Tạo và sử dụng USER FUNCTION

Với các vấn đề mà các FUNCTION không giải quyết được. Thì chúng ta phải tự tạo ra một FUNCTION để sử dụng, hay còn gọi là USER FUNCTION.

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

GỌI NGAY

098 953 44 58

Nhận tư vấn, định hướng 1-1

Điền và gửi thông tin cá nhân để được tư vấn miễn phí về các chương trình học.

3 + 4 =