|
@@ -1,15 +1,18 @@
|
|
|
package cn.iocoder.yudao.framework.security.config;
|
|
|
|
|
|
import cn.iocoder.yudao.framework.security.core.aop.PreAuthenticatedAspect;
|
|
|
+import cn.iocoder.yudao.framework.security.core.context.TransmittableThreadLocalSecurityContextHolderStrategy;
|
|
|
import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter;
|
|
|
import cn.iocoder.yudao.framework.security.core.handler.AccessDeniedHandlerImpl;
|
|
|
import cn.iocoder.yudao.framework.security.core.handler.AuthenticationEntryPointImpl;
|
|
|
import cn.iocoder.yudao.framework.security.core.handler.LogoutSuccessHandlerImpl;
|
|
|
import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService;
|
|
|
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
|
|
|
+import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
|
|
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.security.web.AuthenticationEntryPoint;
|
|
@@ -85,4 +88,17 @@ public class YudaoSecurityAutoConfiguration {
|
|
|
return new JWTAuthenticationTokenFilter(securityProperties, securityFrameworkService, globalExceptionHandler);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 声明调用 {@link SecurityContextHolder#setStrategyName(String)} 方法,
|
|
|
+ * 设置使用 {@link TransmittableThreadLocalSecurityContextHolderStrategy} 作为 Security 的上下文策略
|
|
|
+ */
|
|
|
+ @Bean
|
|
|
+ public MethodInvokingFactoryBean securityContextHolderMethodInvokingFactoryBean() {
|
|
|
+ MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
|
|
|
+ methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class);
|
|
|
+ methodInvokingFactoryBean.setTargetMethod("setStrategyName");
|
|
|
+ methodInvokingFactoryBean.setArguments(TransmittableThreadLocalSecurityContextHolderStrategy.class.getName());
|
|
|
+ return methodInvokingFactoryBean;
|
|
|
+ }
|
|
|
+
|
|
|
}
|