Spring security logout - 仅在登录用户触发注销时添加消息
Posted
技术标签:
【中文标题】Spring security logout - 仅在登录用户触发注销时添加消息【英文标题】:Spring security logout - add a message only when logout triggered from a logged in user 【发布时间】:2015-07-29 01:50:41 【问题描述】:假设我的注销 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;
Spring-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,我认为最简单的方法是使用 Spring Security 将 /logout
限制为经过身份验证的用户。
使用命名空间:
<intercept-url pattern="/logout" access="IS_AUTHENTICATED_REMEMBERED"/>
使用Java配置,会是:
protected void configure(HttpSecurity http) throws Exception
http
.authorizeRequests()
.antMatchers("/logout").authenticated()
...
【讨论】:
面对错误:Failed to evaluate expression 'IS_AUTHENTICATED_REMEMBERED.'
@Robby Failed to evaluate expression 'IS_AUTHENTICATED_REMEMBERED
的错误可以使用这个答案解决:***.com/a/33443212/3380951【参考方案2】:
添加 @RequestParam(value = "foo", required = false) Boolean foo
将此附加参数添加到注销按钮,如果foo
存在并且为真,请按照您的逻辑进行
【讨论】:
谢谢。这行得通。但是将注销 URL 限制为仅对经过身份验证的用户似乎是更好的方法。再次感谢。 :) 是的,这是更好的解决方案:)以上是关于Spring security logout - 仅在登录用户触发注销时添加消息的主要内容,如果未能解决你的问题,请参考以下文章
调用 j_spring_security_logout 不起作用
spring-security login?logout 重定向到登录