2016-12-05 3 views
0

У меня есть веб-приложение с пружинным основанием, где мне нужно, чтобы пользователь автоматически выходил из системы, когда выполнялись определенные условия. Я хотел бы иметь такой же эффект, как если бы пользователь перешел к logout-url, настроенному в <security:logout logout-url="url" success-handler-ref="handler" />.Каков рекомендуемый способ настройки LogoutFilter весной?

Насколько я понимаю, это происходит в LogoutFilter, где вызывается все LogoutHandlers, которые определены для этого фильтра.

Моя идея состояла в том, чтобы создать подкласс LogoutFilter, так что я могу реализовать свою собственную логику в requiresLogout(HttpServletRequest request, HttpServletResponse response) метода:

public class CustomLogoutFilter extends LogoutFilter { 

    public CustomLogoutFilter(LogoutSuccessHandler logoutSuccessHandler, LogoutHandler... handlers) { 
     super(logoutSuccessHandler, handlers); 
    } 

    public CustomLogoutFilter(String logoutSuccessUrl, LogoutHandler... handlers) { 
     super(logoutSuccessUrl, handlers); 
    } 

    @Override 
    protected boolean requiresLogout(HttpServletRequest request, HttpServletResponse response) { 
     boolean result = super.requiresLogout(request, response); 
     result &= isCustomCondition(); 

     return result; 
    } 

    private boolean isCustomCondition(){ 
     // evaluate custom condition and return the value 
    } 
} 

Я попытался объявить CustomLogoutFilter как боб с LogoutFilter как своего родителя, но это Безразлично Кажется, он работает.

Можно ли настроить CustomLogoutFilter таким образом, чтобы он использовался веб-приложением вместо стандартного LogoutFilter? Есть ли рекомендуемый способ реализации этой логики?

Я использую весеннюю защиту против 3.2.5.

+0

Считаете ли вы, что этого достаточно, чтобы реализовать пользовательский ['RequestMatcher'] (http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/ Web/Util/согласовань/RequestMatcher.html)? – dur

+0

Да, это возможное решение. Можно ли настроить Spring так, чтобы 'LogoutFilter' использовал мой' customLogoutRequestMatcher' вместо стандартного 'logoutRequestMatcher', который определен в классе фильтра? –

ответ

0

Если вы используете конфигурацию Java вместо Security Namespace конфигурации (XML), вы можете написать свой собственный RequestMatcher и добавить их к LogoutFilter см LogoutConfigurer#logoutRequestMatcher:

RequestMatcher, который вызывает выйти произойти. В большинстве случаев пользователи будут использовать logoutUrl(String), что поможет обеспечить соблюдение надлежащей практики.

 Смежные вопросы

  • Нет связанных вопросов^_^