【问题标题】:Spring Security causing PageNotFoundSpring Security 导致 PageNotFound
【发布时间】:2015-10-21 16:03:30
【问题描述】:

几天来,当我将 Spring Security 集成到我的 Spring MVC Web 应用程序中时,我遇到了一个问题。在客户端,我有一些 JavaScript 代码,它会生成一个带有给定 url 的 post 请求,然后将其映射到服务器端的特定控制器,以便执行适当的代码。我收到以下错误:

“org.springframework.web.servlet.PageNotFound - 在名为 'appServlet' 的 DispatcherServlet 中找不到带有 URI [/403] 的 HTTP 请求的映射”

我们将不胜感激。

我将以下内容添加到我的 web.xml 以激活 Spring Security:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/spring-security.xml,
      /WEB-INF/spring-database.xml
    </param-value>
</context-param>
<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>

JavaScript:

$.ajax({
        url: "/assign/saveAssignment",
        data: {
            "taskID": taskID,
            "userID": userID,
            "isAssigned": !isActive
        },
        type: "POST",
        success: function () {
            console.log("Saved assignment.");
        }

    })

控制器:

@RequestMapping(value = "/assign/saveAssignment", method = RequestMethod.POST)
    public HttpHeaders saveAssignment(@RequestParam String taskID, @RequestParam String userID, @RequestParam String isAssigned) {
...
}

Servlet 定义(在 web.xml 中)

...
<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
  </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>
...

【问题讨论】:

    标签: javascript spring-mvc spring-security


    【解决方案1】:

    我首先了解到 csrf 保护在默认情况下是禁用的,所以为了测试 csrf 保护是否阻止了我的请求,我所做的只是从我的代码中删除 &lt;csrf/&gt;

    然而,似乎默认行为实际上是启用 csrf 的。在尝试了很多事情之后,我终于注意到标签 csrf 确实可以是configured。所以&lt;csrf disabled="true"/&gt; 有效地禁用了它,并让我的应用程序在 Spring Security 下正常工作。当然,最好的办法是重新启用它并为每个请求添加一个令牌。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2018-04-15
      • 2016-03-02
      • 2019-05-04
      相关资源
      最近更新 更多