2015-05-17 3 views
0

Допустим, что мой logout URL: app/logout. Мне нужно показать сообщение - «Вы успешно вышли из системы» на странице выхода из системы, только когда выход из системы был триггером, кликнув кнопку выхода.
Сообщение не должно отображаться, если пользователь вводит этот URL напрямую. Есть идеи, как это реализовать?Выход из системы безопасности - добавление сообщения только при выходе из системы вошедшего в систему пользователя

Контроллер:

@RequestMapping(value ="/logout", method = RequestMethod.GET) 
    public ModelAndView logout(HttpServletRequest request, HttpServletResponse response) { 
      ModelAndView model = new ModelAndView(); 
     //some code here to distingish 
      model.addObject("msg", "You are succesfully logged out!"); 
      model.setViewName("login"); 
     return model; 
    } 

весна-security.xml:

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd «>

<http auto-config="true" create-session="ifRequired" use-expressions="true">   
<intercept-url pattern="/logout" access="IS_AUTHENTICATED_REMEMBERED"/> 
    <form-login 
     login-page="/login" 
     default-target-url="/home" 
     authentication-failure-url="/login?error" 
     username-parameter="username" 
     password-parameter="password" /> 
    <logout logout-success-url="/logout" invalidate-session="true" delete-cookies="JSESSIONID"/> 
    <!-- enable csrf protection --> 
    <csrf/> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="mkyong" password="123456" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

ответ

1

Как это для Spring Security, я думаю, что самый простой способ заключается в использовании пружинной безопасности для ограничения /logout в аутентифицированных пользователей.

Использование пространства имен было бы:

<intercept-url pattern="/logout" access="IS_AUTHENTICATED_REMEMBERED"/> 

Использование конфигурации Java, было бы:

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .antMatchers("/logout").authenticated() 
      ... 
} 
+0

Опасаясь ошибки: 'Не удалось оценить выражение 'IS_AUTHENTICATED_REMEMBERED.'' – Robby

+0

Я отредактировал вопрос с spring-security.xml – Robby

+0

@Robby ошибка' Не удалось оценить выражение' IS_AUTHENTICATED_REMEMBERED 'можно решить с помощью этого ответа: http://stackoverflow.com/a/33443212/3380951 –

0

Добавить @RequestParam(value = "foo", required = false) Boolean foo

Добавить этот дополнительный параметр кнопки для выхода из системы, если foo существует и правда сделать вашу логику

+0

Спасибо. Это работает. Однако ограничение URL выхода только для аутентифицированного пользователя, по-видимому, является лучшим подходом. Еще раз спасибо. :) – Robby

+0

Да, это лучшее решение :) – kxyz

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