当前位置: 首页 > 知识库问答 >
问题:

Spring Security注销未成功-处理程序-ref

鲁成天
2023-03-14
<http auto-config="false" entry-point-ref="customAuthenticationEntryPoint"  create-session="ifRequired" >
        <intercept-url pattern="/**" access="hasAuthority('Admin')" />
        <custom-filter before="BASIC_AUTH_FILTER"  ref="loginTokenFilter" />
        <logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
        <access-denied-handler error-page="/noaccess.html"/>
        <headers>
            <frame-options policy="SAMEORIGIN" />
        </headers>
    </http>
@Component("logoutSuccessHandler")
    public class MyLogoutSuccessHandler implements LogoutSuccessHandler {

    private static final Logger logger = LoggerFactory.getLogger(MyLogoutSuccessHandler.class);

    private final MyRedirectHandler redirectHandler;

    @Autowired
    public MyLogoutSuccessHandler(
            MyRedirectHandler redirectHandler) {
        this.redirectHandler = redirectHandler;
    }


    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        if (response.isCommitted()) {
            logger.debug("Won't redirect");
            return;
        }

        redirectHandler.redirectToLogin(request, response, true);
    }
}

在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>

共有1个答案

谢裕
2023-03-14

默认情况下,Spring security启用CSRF,注销必须是POST请求,因为它需要CSRF令牌。查看Spring CSRF文档。另一个类似的SO问题

如果您希望注销以处理GET请求,可以在配置中像这样切换CSRF。

<http auto-config="false">
        <csrf disabled="true"/> 

如果您不想切换CSRF,您必须像这样发布注销

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
  <input type="submit" value="Log out" />
  <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
 类似资料:
  • 我的登录页面http://localhost:8080/nradmin/welcome,主页(登录成功后)http://localhost:8080/nradmin/home 我想注销,不再能够访问任何其他页面,如主页,但只能访问欢迎(登录)页面。如果我键入http://localhost:8080/nradmin/home在注销后的浏览器上,我可以继续访问主页,而无需登录。 我已经实现了从抽象类

  • 问题内容: 我正在编写一个Web服务器,其中需要在运行时注册处理程序。例如,“ / create”将为所有URL(例如“ / 123 / ”等)创建一个新的处理程序。我需要一个相应的“ / destroy / 123”,它将为“ / 123 / ”注销处理程序。 这是用于处理“ / create”的代码 我尝试通过嵌入来实现自己的多路复用器,但它在私有变量()中保留了其模式到处理程序的映射 问题答

  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte

  • 有没有一种方法可以添加一个登录成功处理程序使用spall-oaut2? 我尝试使用基本身份验证过滤器,但它只过滤客户端凭据,而不是用户凭据。 还是需要创建自定义用户身份验证管理器? 蒂亚

  • 4.2.4注销处理 logout元素通过导航到特定URL添加了对注销的支持。默认的注销URL是/logout,但是您可以使用logout-url属性将其设置为其他内容。有关其他可用属性的更多信息可以在命名空间附录中找到。 但是,在遵循文档中的安全设置后,URL/logout不会显示注销页面。相反,它显示 Spring Framework 4.1.6 Spring Security 4.0.0 we

  • 我有一个在视图上执行动画的功能。我想为此函数实现一个完成处理程序,该处理程序将在动画完成后调用。 在ViewController中... 在HudView类中... 我尝试了很多方法,但找不到正确的语法: 传递非转义参数“myCompletionHandler”到函数,期望一个@转义闭包 无法将“Void”类型的值转换为预期的参数类型“((Bool) - 闭包:使用非转义参数“myCompleti