WebSecurityConfig.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.jiayue.center.config;
  2. import com.jiayue.center.filter.*;
  3. import com.jiayue.center.handler.*;
  4. import com.jiayue.center.service.SysPolicyService;
  5. import com.jiayue.center.service.SysUserService;
  6. import com.jiayue.center.service.impl.UserServiceImpl;
  7. import com.jiayue.center.util.JwtTokenUtil;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.http.HttpMethod;
  12. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  13. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  14. import org.springframework.security.config.annotation.web.builders.WebSecurity;
  15. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  16. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  17. import org.springframework.security.config.http.SessionCreationPolicy;
  18. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  19. import org.springframework.security.crypto.password.PasswordEncoder;
  20. import org.springframework.security.web.authentication.logout.LogoutFilter;
  21. import org.springframework.security.web.firewall.DefaultHttpFirewall;
  22. import org.springframework.security.web.firewall.HttpFirewall;
  23. /**
  24. * WebSecurityConfig
  25. * @author xsl
  26. * @date 2023/2/16
  27. */
  28. @Configuration
  29. @EnableWebSecurity
  30. @EnableGlobalMethodSecurity(prePostEnabled = true)
  31. public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  32. @Autowired
  33. SysPolicyService sysPolicyService;
  34. @Autowired
  35. UserServiceImpl userServiceImpl;
  36. @Autowired
  37. CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
  38. @Autowired
  39. EntryPointUnauthorizedHandler entryPointUnauthorizedHandler;
  40. @Autowired
  41. CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
  42. @Autowired
  43. RestAccessDeniedHandler restAccessDeniedHandler;
  44. @Autowired
  45. CustomLogoutSuccessHandler customLogoutSuccessHandler;
  46. @Autowired
  47. JwtTokenUtil jwtTokenUtil;
  48. @Autowired
  49. SysUserService sysUserService;
  50. // @Autowired
  51. // XssEscapeFilter xssEscapeFilter;
  52. // @Autowired
  53. // XssKeywordsFilter xssKeywordsFilter;
  54. // @Autowired
  55. // SqlFilter sqlFilter;
  56. // @Autowired
  57. // VerifySmFilter verifySmFilter;
  58. @Autowired
  59. InterfaceLimitFilter interfaceLimitFilter;
  60. @Bean
  61. public MyAuthenticationProvider eacpsAuthenticationProvider(){
  62. MyAuthenticationProvider myAuthenticationProvider = new MyAuthenticationProvider();
  63. myAuthenticationProvider.setUserDetailsService(userServiceImpl);
  64. return myAuthenticationProvider;
  65. }
  66. @Bean
  67. public PasswordEncoder passwordEncoder() {
  68. // 明文+随机盐值》加密存储
  69. return new BCryptPasswordEncoder();
  70. }
  71. @Bean
  72. public HttpFirewall allowUrlEncodedSlashHttpFirewall(){
  73. return new DefaultHttpFirewall();
  74. }
  75. // @Override
  76. // protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  77. // auth.userDetailsService(userServiceImpl);
  78. // }
  79. @Override
  80. protected void configure(HttpSecurity httpSecurity) throws Exception {
  81. httpSecurity.addFilterBefore(interfaceLimitFilter, LogoutFilter.class);
  82. httpSecurity.addFilterBefore(new VerifySmFilter(), LogoutFilter.class);
  83. httpSecurity.addFilterBefore(new XssKeywordsFilter(), LogoutFilter.class);
  84. httpSecurity.addFilterBefore(new XssEscapeFilter(), LogoutFilter.class);
  85. httpSecurity.addFilterBefore(new SqlFilter(), LogoutFilter.class);
  86. httpSecurity.addFilterBefore(new VerifyCodeFilter(), LogoutFilter.class);
  87. httpSecurity.addFilterBefore(new JwtAuthenticationTokenFilter(userServiceImpl, jwtTokenUtil, sysUserService,sysPolicyService), LogoutFilter.class);
  88. // httpSecurity.headers().frameOptions().disable();
  89. // httpSecurity.headers().httpStrictTransportSecurity().includeSubDomains(true).preload(true).maxAgeInSeconds(31536000);
  90. httpSecurity
  91. // 由于使用的是JWT,我们这里不需要csrf
  92. .csrf().disable()
  93. // 基于token,所以不需要session
  94. .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  95. .and().authorizeRequests()
  96. // .antMatchers("/user/login","/captchaImage").permitAll()
  97. .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
  98. .antMatchers("/getVerifyCode/**","/favicon.ico").permitAll()
  99. // 除上面外的所有请求全部需要鉴权认证
  100. .anyRequest().authenticated()
  101. .and().headers().cacheControl();
  102. httpSecurity.formLogin().loginProcessingUrl("/user/login")
  103. .successHandler(customAuthenticationSuccessHandler)
  104. .failureHandler(customAuthenticationFailureHandler);
  105. httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(customLogoutSuccessHandler);
  106. httpSecurity.exceptionHandling().authenticationEntryPoint(entryPointUnauthorizedHandler).accessDeniedHandler(restAccessDeniedHandler);
  107. }
  108. //针对静态资源放行
  109. @Override
  110. public void configure(WebSecurity web) throws Exception {
  111. web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
  112. /*super.configure(web);*/
  113. web.ignoring().antMatchers("/static/**","/assets/**","/");
  114. }
  115. }