123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package com.jiayue.center.config;
- import com.jiayue.center.filter.*;
- import com.jiayue.center.handler.*;
- import com.jiayue.center.service.SysPolicyService;
- import com.jiayue.center.service.SysUserService;
- import com.jiayue.center.service.impl.UserServiceImpl;
- import com.jiayue.center.util.JwtTokenUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.HttpMethod;
- import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
- import org.springframework.security.config.annotation.web.builders.HttpSecurity;
- import org.springframework.security.config.annotation.web.builders.WebSecurity;
- import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
- import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
- import org.springframework.security.config.http.SessionCreationPolicy;
- import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.security.web.authentication.logout.LogoutFilter;
- import org.springframework.security.web.firewall.DefaultHttpFirewall;
- import org.springframework.security.web.firewall.HttpFirewall;
- /**
- * WebSecurityConfig
- * @author xsl
- * @date 2023/2/16
- */
- @Configuration
- @EnableWebSecurity
- @EnableGlobalMethodSecurity(prePostEnabled = true)
- public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
- @Autowired
- SysPolicyService sysPolicyService;
- @Autowired
- UserServiceImpl userServiceImpl;
- @Autowired
- CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
- @Autowired
- EntryPointUnauthorizedHandler entryPointUnauthorizedHandler;
- @Autowired
- CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
- @Autowired
- RestAccessDeniedHandler restAccessDeniedHandler;
- @Autowired
- CustomLogoutSuccessHandler customLogoutSuccessHandler;
- @Autowired
- JwtTokenUtil jwtTokenUtil;
- @Autowired
- SysUserService sysUserService;
- // @Autowired
- // XssEscapeFilter xssEscapeFilter;
- // @Autowired
- // XssKeywordsFilter xssKeywordsFilter;
- // @Autowired
- // SqlFilter sqlFilter;
- // @Autowired
- // VerifySmFilter verifySmFilter;
- @Autowired
- InterfaceLimitFilter interfaceLimitFilter;
- @Bean
- public MyAuthenticationProvider eacpsAuthenticationProvider(){
- MyAuthenticationProvider myAuthenticationProvider = new MyAuthenticationProvider();
- myAuthenticationProvider.setUserDetailsService(userServiceImpl);
- return myAuthenticationProvider;
- }
- @Bean
- public PasswordEncoder passwordEncoder() {
- // 明文+随机盐值》加密存储
- return new BCryptPasswordEncoder();
- }
- @Bean
- public HttpFirewall allowUrlEncodedSlashHttpFirewall(){
- return new DefaultHttpFirewall();
- }
- // @Override
- // protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- // auth.userDetailsService(userServiceImpl);
- // }
- @Override
- protected void configure(HttpSecurity httpSecurity) throws Exception {
- httpSecurity.addFilterBefore(interfaceLimitFilter, LogoutFilter.class);
- httpSecurity.addFilterBefore(new VerifySmFilter(), LogoutFilter.class);
- httpSecurity.addFilterBefore(new XssKeywordsFilter(), LogoutFilter.class);
- httpSecurity.addFilterBefore(new XssEscapeFilter(), LogoutFilter.class);
- httpSecurity.addFilterBefore(new SqlFilter(), LogoutFilter.class);
- httpSecurity.addFilterBefore(new VerifyCodeFilter(), LogoutFilter.class);
- httpSecurity.addFilterBefore(new JwtAuthenticationTokenFilter(userServiceImpl, jwtTokenUtil, sysUserService,sysPolicyService), LogoutFilter.class);
- // httpSecurity.headers().frameOptions().disable();
- // httpSecurity.headers().httpStrictTransportSecurity().includeSubDomains(true).preload(true).maxAgeInSeconds(31536000);
- httpSecurity
- // 由于使用的是JWT,我们这里不需要csrf
- .csrf().disable()
- // 基于token,所以不需要session
- .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .and().authorizeRequests()
- // .antMatchers("/user/login","/captchaImage").permitAll()
- .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
- .antMatchers("/getVerifyCode/**","/favicon.ico").permitAll()
- // 除上面外的所有请求全部需要鉴权认证
- .anyRequest().authenticated()
- .and().headers().cacheControl();
- httpSecurity.formLogin().loginProcessingUrl("/user/login")
- .successHandler(customAuthenticationSuccessHandler)
- .failureHandler(customAuthenticationFailureHandler);
- httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(customLogoutSuccessHandler);
- httpSecurity.exceptionHandling().authenticationEntryPoint(entryPointUnauthorizedHandler).accessDeniedHandler(restAccessDeniedHandler);
- }
- //针对静态资源放行
- @Override
- public void configure(WebSecurity web) throws Exception {
- web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
- /*super.configure(web);*/
- web.ignoring().antMatchers("/static/**","/assets/**","/");
- }
- }
|