WebSecurityConfig.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.izouma.walkchina.security;
  2. import com.izouma.walkchina.service.UserInfoService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.security.authentication.AuthenticationManager;
  7. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  8. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  9. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  10. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  11. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  12. import org.springframework.security.config.http.SessionCreationPolicy;
  13. import org.springframework.security.core.userdetails.UserDetailsService;
  14. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  15. import org.springframework.security.crypto.password.PasswordEncoder;
  16. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  17. @Configuration
  18. @EnableWebSecurity
  19. @EnableGlobalMethodSecurity(prePostEnabled = true)
  20. public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  21. @Autowired
  22. private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
  23. @Autowired
  24. private UserInfoService userInfoService;
  25. @Autowired
  26. private JwtRequestFilter jwtRequestFilter;
  27. @Autowired
  28. public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
  29. // configure AuthenticationManager so that it knows from where to load
  30. // user for matching credentials
  31. // Use BCryptPasswordEncoder
  32. auth.userDetailsService(userInfoService).passwordEncoder(passwordEncoder());
  33. }
  34. @Bean
  35. public PasswordEncoder passwordEncoder() {
  36. return new BCryptPasswordEncoder();
  37. }
  38. @Bean
  39. @Override
  40. public AuthenticationManager authenticationManagerBean() throws Exception {
  41. return super.authenticationManagerBean();
  42. }
  43. @Override
  44. protected void configure(HttpSecurity httpSecurity) throws Exception {
  45. // We don't need CSRF for this example
  46. httpSecurity.csrf().disable()
  47. // dont authenticate this particular request
  48. .authorizeRequests()
  49. .antMatchers("/**/**").permitAll()
  50. // all other requests need to be authenticated
  51. .anyRequest().authenticated().and()
  52. // make sure we use stateless session; session won't be used to
  53. // store user's state.
  54. .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
  55. .and().sessionManagement()
  56. .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
  57. // Add a filter to validate the tokens with every request
  58. httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
  59. }
  60. }