WebSecurityConfig.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.zoniot.ccrc.security;
  2. import com.zoniot.ccrc.security.integration.IntegrationSecurityConfig;
  3. import com.zoniot.ccrc.security.mobile.MobileLoginUserDetailService;
  4. import com.zoniot.ccrc.security.mobile.MobileSecurityConfig;
  5. import com.zoniot.ccrc.security.openid.OpenidSecurityConfig;
  6. import com.zoniot.ccrc.security.smsCode.SmsCodeCheckUserFilter;
  7. import com.zoniot.ccrc.security.smsCode.SmsCodeSecurityConfig;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.beans.factory.annotation.Qualifier;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.http.HttpMethod;
  12. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  13. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  14. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  15. import org.springframework.security.config.annotation.web.builders.WebSecurity;
  16. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  17. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  18. import org.springframework.security.config.http.SessionCreationPolicy;
  19. import org.springframework.security.web.AuthenticationEntryPoint;
  20. import org.springframework.security.web.access.AccessDeniedHandler;
  21. import org.springframework.security.web.authentication.AuthenticationFailureHandler;
  22. import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
  23. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  24. import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
  25. /**
  26. * SpringSecurity 核心配置类
  27. */
  28. @Configuration
  29. @EnableWebSecurity
  30. @EnableGlobalMethodSecurity(prePostEnabled = true) // 启用方法级别的权限认证
  31. public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  32. @Autowired
  33. @Qualifier("userAuthenticationSuccessHandler")
  34. private AuthenticationSuccessHandler authenticationSuccessHandler;
  35. @Autowired
  36. @Qualifier("userAuthenticationFailureHandler")
  37. private AuthenticationFailureHandler authenticationFailureHandler;
  38. @Autowired
  39. @Qualifier("userLogoutSuccessHandler")
  40. private LogoutSuccessHandler logoutSuccessHandler;
  41. @Autowired
  42. @Qualifier("userAuthenticationEntryPoint")
  43. private AuthenticationEntryPoint authenticationEntryPoint;
  44. @Autowired
  45. @Qualifier("userAccessDeniedHandler")
  46. private AccessDeniedHandler accessDeniedHandler;
  47. @Autowired
  48. private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
  49. @Autowired
  50. private SecurityCrossFilter securityCrossFilter;
  51. @Autowired
  52. private MobileSecurityConfig mobileSecurityConfig;
  53. @Autowired
  54. private MobileLoginUserDetailService mobileLoginUserDetailService;
  55. @Autowired
  56. private SmsCodeCheckUserFilter smsCodeCheckUserFilter;
  57. @Autowired
  58. private SmsCodeSecurityConfig smsCodeSecurityConfig;
  59. @Autowired
  60. private OpenidSecurityConfig openidSecurityConfig;
  61. @Autowired
  62. private IntegrationSecurityConfig integrationSecurityConfig;
  63. /*@Autowired
  64. public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
  65. auth.userDetailsService(mobileLoginUserDetailService).passwordEncoder(passwordEncoder());
  66. }*/
  67. @Override
  68. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  69. auth.userDetailsService(mobileLoginUserDetailService);
  70. }
  71. @Override
  72. public void configure(WebSecurity web) throws Exception {
  73. web.ignoring().antMatchers( "/swagger-ui.html", "/webjars/**", "/swagger-resources/**", "/v2/**", "/test/**")
  74. .antMatchers( "/validateCode/image", "/validateCode/test")
  75. .antMatchers("/statics/**", "/sms/send/**","/sms/v2/send/**","/file/**")
  76. .antMatchers("/druid/**")
  77. .antMatchers("/integration/user/save","/integration/user/del")
  78. .antMatchers("/external/getSiteCustomerIds");
  79. }
  80. @Override
  81. protected void configure(HttpSecurity http) throws Exception {
  82. http
  83. //.addFilterBefore(smsCodeCheckUserFilter, UsernamePasswordAuthenticationFilter.class)
  84. .csrf().disable()
  85. // 基于token,所以不需要session
  86. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  87. .and().authorizeRequests()
  88. .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
  89. // .anyRequest().authenticated()
  90. .and()
  91. .formLogin()
  92. .successHandler(authenticationSuccessHandler)//登陆成功处理
  93. .failureHandler(authenticationFailureHandler)//登陆失败
  94. .and().logout().permitAll()
  95. .logoutSuccessHandler(logoutSuccessHandler).permitAll();
  96. http.exceptionHandling()
  97. .authenticationEntryPoint(authenticationEntryPoint)//未授权处理
  98. // 已经认证的用户访问自己没有权限的资源处理
  99. .accessDeniedHandler(accessDeniedHandler)//权限不足处理
  100. //.and().addFilterBefore(securityCrossFilter, UsernamePasswordAuthenticationFilter.class)
  101. .and().addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
  102. .apply(mobileSecurityConfig)
  103. .and()
  104. .apply(smsCodeSecurityConfig)
  105. .and()
  106. .apply(integrationSecurityConfig)
  107. .and()
  108. .apply(openidSecurityConfig);
  109. }
  110. }