SecurityConfig.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package com.jd.lightapplication.config;
  2. import com.jd.lightapplication.security.*;
  3. import com.jd.lightapplication.service.SysUserService;
  4. import com.jd.lightapplication.utils.JwtUtils;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  9. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  10. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  11. import org.springframework.security.config.annotation.web.builders.WebSecurity;
  12. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  13. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  14. import org.springframework.security.config.http.SessionCreationPolicy;
  15. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  16. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  17. /**
  18. * 功能描述:JWT配置
  19. *
  20. * @Author WaiterXiaoYY
  21. * @Date 2022/1/17 14:10
  22. * @Version 1.0
  23. */
  24. @Configuration
  25. @EnableWebSecurity
  26. @EnableGlobalMethodSecurity(prePostEnabled = true)
  27. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  28. @Autowired
  29. JwtUtils jwtUtils;
  30. @Autowired
  31. SysUserService sysUserService;
  32. @Autowired
  33. LoginFailureHandler loginFailureHandler;
  34. @Autowired
  35. LoginSuccessHandler successHandler;
  36. @Autowired
  37. CaptchaFilter captchaFilter;
  38. @Autowired
  39. private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;
  40. JwtAuthenticationFilter jwtAuthenticationFilter() throws Exception {
  41. JwtAuthenticationFilter jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager(), jwtUtils, userDetailService, sysUserService);
  42. return jwtAuthenticationFilter;
  43. }
  44. @Autowired
  45. JwtAccessDeniedHandler jwtAccessDeniedHandler;
  46. @Autowired
  47. JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
  48. @Autowired
  49. UserDetailServiceImpl userDetailService;
  50. @Autowired
  51. JwtLogoutSuccessHandler jwtLogoutSuccessHandler;
  52. @Autowired
  53. MobileLoginFilter mobileLoginFilter;
  54. @Bean
  55. BCryptPasswordEncoder bCryptPasswordEncoder() {
  56. return new BCryptPasswordEncoder();
  57. }
  58. private static final String[] URL_WHITELIST = {
  59. "/login/**",
  60. "/logout",
  61. "/captcha",
  62. "/favicon.ico",
  63. "/webjars/**",//接口文档地址
  64. "/swagger-resources/**",//接口文档地址
  65. "/doc.html",//接口文档地址
  66. "/v3/api-docs",//接口文档地址
  67. "/api/easemob/**",//环信接口
  68. "/api/sms/**",//发短信接口
  69. "/api/meeting/info/getByIdNotAuth",//根据会议id查询详情
  70. "/showfile/**"
  71. };
  72. protected void configure(HttpSecurity http) throws Exception {
  73. http.cors().and().csrf().disable()
  74. // 登录配置
  75. .formLogin()
  76. .successHandler(successHandler)
  77. .failureHandler(loginFailureHandler)
  78. // 登出配置
  79. .and()
  80. .logout()
  81. .logoutSuccessHandler(jwtLogoutSuccessHandler)
  82. // 禁用session
  83. .and()
  84. .sessionManagement()
  85. .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  86. // 配置拦截规则
  87. .and()
  88. .authorizeRequests()
  89. .antMatchers(URL_WHITELIST).permitAll()
  90. .anyRequest().authenticated()
  91. // 异常处理器
  92. .and()
  93. .exceptionHandling()
  94. .authenticationEntryPoint(jwtAuthenticationEntryPoint)
  95. .accessDeniedHandler(jwtAccessDeniedHandler)
  96. //配置自定义过滤器
  97. .and()
  98. .addFilter(jwtAuthenticationFilter())
  99. .addFilterBefore(captchaFilter, UsernamePasswordAuthenticationFilter.class)
  100. .addFilterBefore(mobileLoginFilter, UsernamePasswordAuthenticationFilter.class)
  101. .apply(smsCodeAuthenticationSecurityConfig);
  102. }
  103. @Override
  104. public void configure(WebSecurity web) throws Exception {
  105. web.ignoring().antMatchers("/captcha");
  106. }
  107. @Override
  108. protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  109. auth.userDetailsService(userDetailService);
  110. }
  111. }