123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package com.jd.lightapplication.config;
- import com.jd.lightapplication.security.*;
- import com.jd.lightapplication.service.SysUserService;
- import com.jd.lightapplication.utils.JwtUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
- 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.web.authentication.UsernamePasswordAuthenticationFilter;
- /**
- * 功能描述:JWT配置
- *
- * @Author WaiterXiaoYY
- * @Date 2022/1/17 14:10
- * @Version 1.0
- */
- @Configuration
- @EnableWebSecurity
- @EnableGlobalMethodSecurity(prePostEnabled = true)
- public class SecurityConfig extends WebSecurityConfigurerAdapter {
- @Autowired
- JwtUtils jwtUtils;
- @Autowired
- SysUserService sysUserService;
- @Autowired
- LoginFailureHandler loginFailureHandler;
- @Autowired
- LoginSuccessHandler successHandler;
- @Autowired
- CaptchaFilter captchaFilter;
- @Autowired
- private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;
- JwtAuthenticationFilter jwtAuthenticationFilter() throws Exception {
- JwtAuthenticationFilter jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager(), jwtUtils, userDetailService, sysUserService);
- return jwtAuthenticationFilter;
- }
- @Autowired
- JwtAccessDeniedHandler jwtAccessDeniedHandler;
- @Autowired
- JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
- @Autowired
- UserDetailServiceImpl userDetailService;
- @Autowired
- JwtLogoutSuccessHandler jwtLogoutSuccessHandler;
- @Autowired
- MobileLoginFilter mobileLoginFilter;
- @Bean
- BCryptPasswordEncoder bCryptPasswordEncoder() {
- return new BCryptPasswordEncoder();
- }
- private static final String[] URL_WHITELIST = {
- "/login/**",
- "/logout",
- "/captcha",
- "/favicon.ico",
- "/webjars/**",//接口文档地址
- "/swagger-resources/**",//接口文档地址
- "/doc.html",//接口文档地址
- "/v3/api-docs",//接口文档地址
- "/api/easemob/**",//环信接口
- "/api/sms/**",//发短信接口
- "/api/meeting/info/getByIdNotAuth",//根据会议id查询详情
- "/showfile/**"
- };
- protected void configure(HttpSecurity http) throws Exception {
- http.cors().and().csrf().disable()
- // 登录配置
- .formLogin()
- .successHandler(successHandler)
- .failureHandler(loginFailureHandler)
- // 登出配置
- .and()
- .logout()
- .logoutSuccessHandler(jwtLogoutSuccessHandler)
- // 禁用session
- .and()
- .sessionManagement()
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- // 配置拦截规则
- .and()
- .authorizeRequests()
- .antMatchers(URL_WHITELIST).permitAll()
- .anyRequest().authenticated()
- // 异常处理器
- .and()
- .exceptionHandling()
- .authenticationEntryPoint(jwtAuthenticationEntryPoint)
- .accessDeniedHandler(jwtAccessDeniedHandler)
- //配置自定义过滤器
- .and()
- .addFilter(jwtAuthenticationFilter())
- .addFilterBefore(captchaFilter, UsernamePasswordAuthenticationFilter.class)
- .addFilterBefore(mobileLoginFilter, UsernamePasswordAuthenticationFilter.class)
- .apply(smsCodeAuthenticationSecurityConfig);
- }
- @Override
- public void configure(WebSecurity web) throws Exception {
- web.ignoring().antMatchers("/captcha");
- }
- @Override
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- auth.userDetailsService(userDetailService);
- }
- }
|