|
|
@@ -1,7 +1,9 @@
|
|
|
package com.xingxi.api.configuration.security;
|
|
|
|
|
|
+import cn.binarywang.wx.miniapp.api.WxMaService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import me.chanjar.weixin.mp.api.WxMpService;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
@@ -10,6 +12,7 @@ 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.web.authentication.UsernamePasswordAuthenticationFilter;
|
|
|
import org.springframework.web.cors.CorsConfiguration;
|
|
|
import org.springframework.web.cors.CorsConfigurationSource;
|
|
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
|
|
@@ -30,6 +33,15 @@ class SpringWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|
|
@Value("${spring.application.cors.allowedHeaders}")
|
|
|
private String[] allowedHeaders;
|
|
|
|
|
|
+ private final JwtAuthenticationManager jwtAuthenticationManager;
|
|
|
+ private final WxLoginAuthenticationManager wxLoginAuthenticationManager;
|
|
|
+ private final WxAuthenticationSuccessHandler wxAuthenticationSuccessHandler;
|
|
|
+ private final WxAuthenticationFailureHandler wxAuthenticationFailureHandler;
|
|
|
+ private final WxAuthenticationEntryPoint wxAuthenticationEntryPoint;
|
|
|
+ private final WxAccessDeniedHandler wxAccessDeniedHandler;
|
|
|
+ private final WxMaService wxMaService;
|
|
|
+ private final WxMpService wxMpService;
|
|
|
+
|
|
|
// cors
|
|
|
@Bean("corsConfigurationSource")
|
|
|
public CorsConfigurationSource corsConfigurationSource() {
|
|
|
@@ -41,7 +53,6 @@ class SpringWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|
|
source.registerCorsConfiguration(pathPattern, configuration);
|
|
|
return source;
|
|
|
}
|
|
|
-
|
|
|
@Override
|
|
|
protected void configure(HttpSecurity http) throws Exception {
|
|
|
http.csrf()
|
|
|
@@ -52,16 +63,37 @@ class SpringWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|
|
.cors()
|
|
|
.and()
|
|
|
.authorizeRequests()
|
|
|
- .antMatchers("/error/**", "/unifiedpay/**", "/api/store/wxlogin", "/wxpay/**").permitAll()
|
|
|
+ .antMatchers("/error/**", "/unifiedpay/**").permitAll()
|
|
|
.anyRequest().authenticated()
|
|
|
.and()
|
|
|
.exceptionHandling()
|
|
|
- .authenticationEntryPoint(null)
|
|
|
- .accessDeniedHandler(null);
|
|
|
+ .authenticationEntryPoint(wxAuthenticationEntryPoint)
|
|
|
+ .accessDeniedHandler(wxAccessDeniedHandler);
|
|
|
+ // 使用WxAppletAuthenticationFilter替换默认的认证过滤器UsernamePasswordAuthenticationFilter
|
|
|
+
|
|
|
+
|
|
|
+ http.addFilterAt(wxLoginAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
|
|
|
+ // 在WxAppletAuthenticationFilter前面添加用于验证jwt,识别用户是否登录的过滤器
|
|
|
+ .addFilterBefore(jwtAuthenticationTokenFilter(), WxLoginAuthenticationProcessingFilter.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public JwtAuthenticationFilter jwtAuthenticationTokenFilter() {
|
|
|
+ log.debug("JwtAuthenticationFilter created.");
|
|
|
+ return new JwtAuthenticationFilter(jwtAuthenticationManager);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public WxLoginAuthenticationProcessingFilter wxLoginAuthenticationProcessingFilter() {
|
|
|
+ log.debug("WxLoginAuthenticationProcessingFilter created.");
|
|
|
+ WxLoginAuthenticationProcessingFilter filter = new WxLoginAuthenticationProcessingFilter(wxLoginAuthenticationManager, wxMaService, wxMpService);
|
|
|
+ filter.setAuthenticationSuccessHandler(wxAuthenticationSuccessHandler);
|
|
|
+ filter.setAuthenticationFailureHandler(wxAuthenticationFailureHandler);
|
|
|
+ return filter;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void configure(WebSecurity web) throws Exception {
|
|
|
+ web.ignoring().antMatchers("/api/store/wxlogin", "/wxpay/**");
|
|
|
}
|
|
|
-//
|
|
|
-// @Override
|
|
|
-// public void configure(WebSecurity web) throws Exception {
|
|
|
-//
|
|
|
-// }
|
|
|
}
|