【问题标题】:Cannot log out with Spring Security无法使用 Spring Security 注销
【发布时间】:2014-03-01 23:30:35
【问题描述】:

我已将 Spring Security 配置为执行我想要的所有操作,但成功注销我除外。当我单击我的注销链接时,它会抛出 404 或将我带到登录页面而不将我注销,具体取决于具体配置。另外值得注意的是,如果我在登录时进入登录页面并输入错误的用户名或密码,我将退出。这向我表明拒绝访问工作正常。如果您发现错误或对如何更好地实施我的解决方案有建议,请发表评论。谢谢。

web.xml:

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>springSecurityFilterChain</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

app-security.xml:

<security:http use-expressions="true" auto-config="true">
    <security:intercept-url pattern="/app/login" access="permitAll" />
    <security:intercept-url pattern="/app/logout" access="permitAll" />
    <security:intercept-url pattern="/app/accessdenied" access="permitAll" />
    <security:intercept-url pattern="/app/**" access="hasRole('USER')" />
    <security:form-login login-page="/app/login" default-target-url="/app" authentication-failure-url="/app/login" />
    <security:logout logout-success-url="/app/login" />
</security:http>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
        <security:user-service>
            <security:user name="d" password="d" authorities="USER" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

家庭控制器:

@RequestMapping(value = "/app/login", method = RequestMethod.GET)
public String login(ModelMap model) {
    return "login";
}

@RequestMapping(value = "/app/accessdenied", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
    model.addAttribute("error", "true");
    return "denied";
}

@RequestMapping(value = "/app/logout", method = RequestMethod.GET)
public String logout(ModelMap model, HttpServletRequest request) {
    return "logout";
}

.jsp 文件中的注销链接:

<form class="form-inline" action="${pageContext.request.contextPath}/app/logout" method="get">

【问题讨论】:

  • 不要使用控制器,spring security 已经注销。而不是/app/logout 使用/j_spring_security_logout 和简单的删除你的控制器方法。

标签: spring spring-security


【解决方案1】:

作为@M。 Denium 指出,您只需将注销链接指向/j_spring_security_logout

如果你想要一个“漂亮”的注销 url,你可以使用security:logoutlogout-url 属性来过滤你的/app/logout url。

<security:logout logout-url="/app/logout" .... />

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2011-06-28
    • 1970-01-01
    • 2014-04-23
    • 2014-02-02
    • 2012-12-04
    • 1970-01-01
    • 2020-04-18
    • 2012-06-03
    相关资源
    最近更新 更多