Весна безопасности с CAS. Конфигурация многих WARS - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу защитить свое приложение с помощью 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...