Я хочу защитить свое приложение с помощью Spring Security и CAS. У него много WAR, и каждый из них должен быть защищен одинаково. Дело в том, что я создал один модуль с конфигурацией, которая распределяется между WAR и загружается в config. Все работает хорошо, кроме выхода. Когда я выхожу, он делает это только для текущей войны. Остальные остаются в системе.
Может быть, проблема в настройке общего доступа? Я просто @Import его в каждом конфиге. Это правильный подход?
Я использую Tomcat 8.5.13.
Это моя конфигурация:
protected void configure(final HttpSecurity http) throws Exception {
CasAuthenticationFilter filter = casAuthenticationFilter(authenticationManager());
http
.addFilter(filter)
.antMatcher("/**")
.antMatcher("/**/**")
.authorizeRequests()
.anyRequest()
.denyAll()
.anyRequest()
.authenticated()
.and()
.csrf()
.csrfTokenRepository(new HttpSessionCsrfTokenRepository())
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.csrf().disable()
.logout()
.logoutUrl("/logout")
.invalidateHttpSession(true)
.logoutSuccessUrl(LOGOUT_SUCCESS_URL)
.permitAll()
.and()
.addFilterBefore(casSingleSignOutFilter(), CasAuthenticationFilter.class)
.addFilterBefore(clusterLogoutFilter(), CasAuthenticationFilter.class)
.addFilterBefore(requestSingleLogoutFilter(), LogoutFilter.class);
}
private LogoutFilter requestSingleLogoutFilter() {
final LogoutFilter logoutFilter = new LogoutFilter(AUTH_URL + "/logout?service=" + AFTER_LOGOUT_URL,
new LogSecurityContextLogoutHandler(),
new CookieClearingLogoutHandler("JSESSIONID"));
logoutFilter.setLogoutRequestMatcher(new AntPathRequestMatcher("/logout"));
return logoutFilter;
}
public CasAuthenticationFilter casAuthenticationFilter(AuthenticationManager authenticationManager) {
final CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
casAuthenticationFilter.setAuthenticationManager(authenticationManager);
casAuthenticationFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler());
casAuthenticationFilter.setAuthenticationFailureHandler(authenticationFailureHandler());
return casAuthenticationFilter;
}
public ClusterLogoutFilter clusterLogoutFilter() {
return new ClusterLogoutFilter("logoutRequest");
}
private AuthenticationSuccessHandler authenticationSuccessHandler() {
SavedRequestAwareAuthenticationSuccessHandler handler = new SavedRequestAwareAuthenticationSuccessHandler();
handler.setDefaultTargetUrl("/");
return handler;
}
private AuthenticationFailureHandler authenticationFailureHandler() {
return new SimpleUrlAuthenticationFailureHandler("/");
}
private SingleSignOutFilter casSingleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
singleSignOutFilter.setCasServerUrlPrefix(AUTH_URL);
singleSignOutFilter.setIgnoreInitConfiguration(true);
singleSignOutFilter.setLogoutParameterName("logoutRequest");
return singleSignOutFilter;
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}