|
|
@@ -3,6 +3,7 @@ package cn.reghao.bnt.web.admin.security;
|
|
|
import cn.reghao.bnt.web.admin.security.filter.LoginRedirectFilter;
|
|
|
import cn.reghao.bnt.web.admin.security.form.AccountAuthFilter;
|
|
|
import cn.reghao.bnt.web.admin.security.form.AccountAuthProvider;
|
|
|
+import cn.reghao.bnt.web.admin.security.session.MySecurityContextRepository;
|
|
|
import cn.reghao.bnt.web.admin.security.session.MySessionAuthenticationStrategy;
|
|
|
import cn.reghao.bnt.web.admin.service.AccountLoginService;
|
|
|
import cn.reghao.bnt.web.admin.service.MenuService;
|
|
|
@@ -52,11 +53,13 @@ public class WebSecurityConfig {
|
|
|
private final LogoutSuccessHandler logoutSuccessHandler;
|
|
|
private final SessionRegistry sessionRegistry;
|
|
|
private final MenuService menuService;
|
|
|
+ private final MySecurityContextRepository mySecurityContextRepository;
|
|
|
|
|
|
public WebSecurityConfig(AccountAuthProvider userAuthProvider, AccountLoginService accountLoginService,
|
|
|
AuthenticationSuccessHandler successHandler, AuthenticationFailureHandler failureHandler,
|
|
|
LogoutHandler logoutHandler, LogoutSuccessHandler logoutSuccessHandler,
|
|
|
- SessionRegistry sessionRegistry, MenuService menuService) {
|
|
|
+ SessionRegistry sessionRegistry, MenuService menuService,
|
|
|
+ MySecurityContextRepository mySecurityContextRepository) {
|
|
|
this.userAuthProvider = userAuthProvider;
|
|
|
this.accountLoginService = accountLoginService;
|
|
|
this.successHandler = successHandler;
|
|
|
@@ -65,6 +68,7 @@ public class WebSecurityConfig {
|
|
|
this.logoutSuccessHandler = logoutSuccessHandler;
|
|
|
this.sessionRegistry = sessionRegistry;
|
|
|
this.menuService = menuService;
|
|
|
+ this.mySecurityContextRepository = mySecurityContextRepository;
|
|
|
}
|
|
|
|
|
|
@Bean
|
|
|
@@ -114,6 +118,7 @@ public class WebSecurityConfig {
|
|
|
return new AuthorizationDecision(false);
|
|
|
}))
|
|
|
//.securityContext((context) -> context.securityContextRepository(new HttpSessionSecurityContextRepository()))
|
|
|
+ .securityContext((context) -> context.securityContextRepository(mySecurityContextRepository))
|
|
|
.securityContext((securityContext) -> securityContext.requireExplicitSave(true))
|
|
|
.addFilterAfter(new LoginRedirectFilter(), SecurityContextHolderFilter.class)
|
|
|
.addFilterBefore(accountAuthFilter(authenticationManager), UsernamePasswordAuthenticationFilter.class)
|
|
|
@@ -122,7 +127,9 @@ public class WebSecurityConfig {
|
|
|
.and()
|
|
|
.exceptionHandling().authenticationEntryPoint(new MyAuthenticationEntryPoint())
|
|
|
.and()
|
|
|
- .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
|
|
|
+ .sessionManagement()
|
|
|
+ .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
|
|
|
+ .sessionFixation().none() // SessionManagementFilter 中禁用 ChangeSessionIdAuthenticationStrategy(会话固定攻击防护)
|
|
|
.and()
|
|
|
.rememberMe().disable()
|
|
|
.cors().disable()
|
|
|
@@ -257,7 +264,7 @@ public class WebSecurityConfig {
|
|
|
|
|
|
List<SessionAuthenticationStrategy> authenticationStrategies = new ArrayList<>();
|
|
|
authenticationStrategies.add(concurrentSessionControlAuthenticationStrategy);
|
|
|
- // 会话固定保护, 认证成功后 session id 会被修改
|
|
|
+ // 会话固定攻击防护, 认证成功后 session id 会被修改
|
|
|
authenticationStrategies.add(new SessionFixationProtectionStrategy());
|
|
|
// 认证成功后将认证信息注册到 SessionRegistry
|
|
|
authenticationStrategies.add(new RegisterSessionAuthenticationStrategy(sessionRegistry));
|