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

Spring Security:注销不起作用-“请求的资源不可用”

宋飞掣
2023-03-14

所以,我正在尝试让我的第一个使用Spring Security的实践应用程序正常工作。这只是一个简单的测试,看看我是否可以让基础知识正常工作,然后再进行更复杂的实现。

我正在使用Spring Security 4 btw,以及Spring 4.2.2。

现在,我有一个欢迎页面和一个管理页面。尝试访问管理页面被拦截并重定向到默认的Spring Security登录表单。从那里,我可以登录并通过身份验证访问管理页面。

在管理页面上,我有一个注销链接。这就是问题所在。我现在有两个注销链接,这是我尝试过的两种不同的方法

第一个是简单的URL。它使用了标签,其中包含了JSTL标签。我正在尝试调用那里的注销URL。当我这样做时,我得到一个HTTP Status 404页面,其中有一个描述说请求的资源不可用。

第二种方法是表单。我尝试在表单中设置一个提交按钮,表单的action属性设置为注销URL,方法设置为发布。

这个错误给了我一个更复杂的错误,我将把它复制并粘贴到这里:

标题:HTTP状态403 -在请求参数' _csrf '或标头' X-CSRF-令牌'中发现无效的CSRF令牌' null '。

类型:状态报告

消息:在请求参数' _csrf '或标头' X-CSRF-令牌'中发现无效的CSRF令牌' null '。

描述:禁止访问指定的资源。

在这两种情况下,错误页面的url,顺便说一句,localhost:8080/spring-security/logout.spring-security是这个测试应用程序的名称。

所以,我有点迷茫。这是我第一次和Spring Security合作,我真的不知道我做错了什么。任何帮助都将不胜感激。

下面是我粘贴我的管理员。jsp页面和我的Spring Security性。xml页面。

提前致谢。

admin.jsp页面:

<%@ page session="true" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<%@ include file="jstl-stub.jsp" %> <!-- Include links to JSTL Libraries -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Admin Page</title>
</head>
<body>

<h1>Title: ${title}</h1>

<h1>Message: ${message}</h1>

<c:if test="${pageContext.request.userPrincipal.name != null}">
    <h2>Welcome: ${pageContext.request.userPrincipal.name}
    | <a href="<c:url value="/logout"/>">Logout</a></h2>

    <br><br>

    <form action="logout" method="post">
        <input type="submit" value="logout"/>
    </form>
</c:if>

</body>
</html>

Spring-安全.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

<security:http auto-config="true">
    <security:intercept-url pattern="/admin" access="hasRole('ROLE_USER')"/>
    <security:logout logout-url="/logout" logout-success-url="/welcome"/>
</security:http>

<security:authentication-manager>
    <security:authentication-provider >
        <security:user-service>
            <security:user name="user" password="password" authorities="ROLE_USER"/>
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

</beans:beans>

共有2个答案

卞经业
2023-03-14
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    // other code ...
}

禁用csrf将为您工作。并允许您通过get方法调用/logout

高功
2023-03-14

我认为第二个问题是你的post方法。我看到您正在使用安全4.0,并且默认情况下启用了4.0 csrf保护。如果您不想这样做,则必须禁用它。

从Spring Security 4.0开始,默认情况下使用XML配置启用CSRF保护。如果要禁用CSRF保护,可以在下面看到相应的XML配置。

<http>
  <!-- ... -->
  <csrf disabled="true"/>
</http>

请参阅下面的链接http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#csrf-configure

但是,如果要添加 csrf 保护,则需要将标头添加到 post 方法中。

本教程可能会帮助您。

http://myshittycode.com/2015/03/30/spring-security-invalid-csrf-token-null-was-found-on-the-request-parameter-_csrf-or-header-x-csrf-token/

 类似资料:
  • 我正在尝试编写我的第一个JSF应用程序,但在Apache Tomcat 8.0/GlassFish 4服务器上部署它时遇到了问题。 例如,我使用了Horstmann的Core Java Server Faces中描述的应用程序(它来自这里的源代码ch01)。根据这本书,我应该做(对于Win 7 x64): < li >从路径ch01/login/src/java使用以下命令行命令编译项目: 如果使

  • 我在使用MyEclipse IDE中的Tomcat服务器和Struts 2框架时遇到了一个反复出现的问题。我正在运行我的程序作为一个服务器应用程序,当它运行时,默认的index.jsp文件将成功打开,但该应用程序的其他过去都将无法工作。当试图加载任何我的。do页面,我得到以下错误:HTTP状态404:请求的资源....不可用。当我以前遇到这个错误时,我只是重启了服务器,一切都很好,但是我现在没有同

  • 当我开始login.jsp表单并键入用户名和密码时,我有这个错误错误错误是HTTP状态404:请求的资源不可用。 我错过了什么?有什么帮助吗? 登录。JAVA 登录。jsp Web.xml Struts配置 这就是我http://www.tutorialspoint.com/struts_2/struts_database_access.htm

  • 问题内容: 在Tomcat服务器上运行Eclipse项目时出现以下错误: HTTP状态404-请求的资源(/ ProjectName /)不可用。 浏览器地址栏中的URL为。 我真的不知道文件中缺少什么。我在文件夹中有一个,并且我的包含以下条目: 问题答案: 默认情况下,当您打开项目根文件夹而不是中的物理文件时,服务器将在中查找欢迎文件。如果未找到任何内容,则将出现此404“找不到页面”错误。 就

  • 你知道我做错了什么吗 我的spring-security配置:

  • 我知道这里给其他有这种/类似问题的人的建议,即servlet最好是在包下编写的,而不是无包的,但我在这方面遵循教科书的指导,当然作为教科书,它的方法必须有效。我用这种方法寻求帮助。 我有一个名为htmlbank.Java的Java servlet,我成功地编译了它,没有出现编译错误。现在,根据课本: 1)将.class文件放入C:\Program Files\Apache Software Fou