Spring Security登录返回404

2024-05-25

我目前正在使用 Spring 框架开发我的博客。我正在实现 Spring Security 用于登录目的。一切都按预期进行,直到我提交始终返回 404 代码的登录凭据。

这是我的 web.xml 代码e

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>avispring</display-name>          

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/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>/admin/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>        
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>        
</servlet-mapping>

这是我的春季安全代码:

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/avispring"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
</bean>
<security:debug/>
<security:http auto-config="true">
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
    <security:intercept-url pattern="/j_spring_security_check" access="permitAll"/>
    <security:form-login        
    login-page="/login.html"
    authentication-failure-url="/login?login_error=1"
    default-target-url="/admin/home.html"/>     
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service 
            data-source-ref="dataSource"
            users-by-username-query="select USERNAME,PASSWORD,ENABLED from USER_AUTHENTICATION where USERNAME=?"
            authorities-by-username-query="select u1.USERNAME,u2.ROLE from USER_AUTHENTICATION u1,USER_AUTHORIZATION u2 where u1.USER_ID=u2.USER_ID and u1.USERNAME=?"/>
    </security:authentication-provider>
</security:authentication-manager>

我的 login.jsp 代码的一部分是

<form action="<c:url value="/login"/>" method="post">
      <div class="form-group has-feedback">
        <input type="email" class="form-control" placeholder="Email" name="username">
        <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
      </div>
      <div class="form-group has-feedback">
        <input type="password" class="form-control" placeholder="Password" name="password">
        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
      </div>
      <div class="row">
        <div class="col-xs-8">
          <div class="checkbox icheck">
            <label>
              <input type="checkbox"> Remember Me
            </label>
          </div>
        </div><!-- /.col -->
        <div class="col-xs-4">
          <button type="submit" class="btn btn-primary btn-block btn-flat"     name="submit">Sign In</button>
        </div><!-- /.col -->
      </div>
    </form>

控制台输出是

十月 16, 2015 1:06:03 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound 警告:在名为“spring”的 DispatcherServlet 中未找到带有 URI [/avispring/login] 的 HTTP 请求的映射

Note:

  1. 我正在使用 spring 4.2.1 和 spring security 4.0.2
  2. 大多数论坛都指向上下文路径,即[应用程序名称/登录名] or [应用程序名称/j_spring_security_check]我认为我的对此还可以

请帮忙...

UPDATE:

当我使用log4j时,表单提交时的调试输出如下:

调试:org.springframework.web.servlet.DispatcherServlet - 将请求上下文绑定到线程:org.apache.catalina.connector.RequestFacade@c8b445 调试:org.springframework.web.servlet.DispatcherServlet - 名为“spring”的 DispatcherServlet 处理 [/avispring/login] 的 POST 请求 调试:org.springframework.web.servlet.DispatcherServlet - 在名为“spring”的 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@16fffcf] 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 查找路径 /login 的处理程序方法 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 未找到 [/login] 的处理程序方法 调试:org.springframework.web.servlet.DispatcherServlet - 在名为“spring”的 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@138f01b] 调试:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping - 找不到 [/login] 的处理程序映射 调试:org.springframework.web.servlet.DispatcherServlet - 在名为“spring”的 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@1ff154c] 调试:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - 找不到 [/login] 的处理程序映射 警告:org.springframework.web.servlet.PageNotFound - 在名为“spring”的 DispatcherServlet 中未找到带有 URI [/avispring/login] 的 HTTP 请求的映射 调试:org.springframework.web.servlet.DispatcherServlet - 清除线程绑定请求上下文:org.apache.catalina.connector.RequestFacade@c8b445 调试:org.springframework.web.servlet.DispatcherServlet - 成功完成请求 调试:org.springframework.web.context.support.XmlWebApplicationContext - 在命名空间“spring-servlet”的 WebApplicationContext 中发布事件:ServletRequestHandledEvent:url=[/avispring/login];客户端=[0:0:0:0:0:0:0:1];方法=[POST]; servlet=[弹簧];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[空];时间=[3毫秒];状态=[确定] 调试:org.springframework.web.context.support.XmlWebApplicationContext - 在根 WebApplicationContext 中发布事件:ServletRequestHandledEvent:url=[/avispring/login];客户端=[0:0:0:0:0:0:0:1];方法=[POST]; servlet=[弹簧];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[空];时间=[3毫秒];状态=[确定] 调试:org.springframework.web.servlet.DispatcherServlet - 将请求上下文绑定到线程:org.apache.catalina.core.ApplicationHttpRequest@bb82df 调试:org.springframework.web.servlet.DispatcherServlet - 名为“spring”的 DispatcherServlet 处理 [/avispring/404.html] 的 POST 请求 调试:org.springframework.web.servlet.DispatcherServlet - 在名为“spring”的 DispatcherServlet 中测试处理程序映射 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@16fffcf] 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 查找路径 /404.html 的处理程序方法 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 找到 1 个匹配的映射 [/404.html]:[{[/404.html]}] 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 返回处理程序方法 [public org.springframework.web.servlet.ModelAndView com.avispring.controllers.HelloController.errorPage()] 调试:org.springframework.web.servlet.DispatcherServlet - 测试处理程序适配器 [org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter@511db5] 调试:org.springframework.web.servlet.DispatcherServlet - 测试处理程序适配器 [org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter@1a86ee] 调试:org.springframework.web.servlet.DispatcherServlet - 测试处理程序适配器 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@c26a5f] 调试:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - 使用参数 [] 调用 [HelloController.errorPage] 方法 调试:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - 方法 [errorPage] 返回 [ModelAndView:引用名称为“/404”的视图;型号为空] 调试:org.springframework.web.servlet.DispatcherServlet - 渲染视图 [org.springframework.web.servlet.view.JstlView: name '/404'; DispatcherServlet 中的 URL [/WEB-INF/jsp//404.jsp]] 名称为“spring” 调试:org.springframework.web.servlet.view.JstlView - 使用模型 {} 和静态属性 {} 渲染名称为“/404”的视图 调试:org.springframework.web.servlet.view.JstlView - 转发到InternalResourceView'/404'中的资源[/WEB-INF/jsp//404.jsp] 调试:org.springframework.web.servlet.DispatcherServlet - 清除线程绑定请求上下文:org.apache.catalina.core.ApplicationHttpRequest@bb82df 调试:org.springframework.web.servlet.DispatcherServlet - 成功完成请求 调试:org.springframework.web.context.support.XmlWebApplicationContext - 在命名空间“spring-servlet”的 WebApplicationContext 中发布事件:ServletRequestHandledEvent:url=[/avispring/404.html];客户端=[0:0:0:0:0:0:0:1];方法=[POST]; servlet=[弹簧];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[空];时间=[1毫秒];状态=[确定] 调试:org.springframework.web.context.support.XmlWebApplicationContext - 在根 WebApplicationContext 中发布事件:ServletRequestHandledEvent:url=[/avispring/404.html];客户端=[0:0:0:0:0:0:0:1];方法=[发布]; servlet=[弹簧];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[空];时间=[1毫秒];状态=[确定]


好吧,这太令人沮丧了,我通过点击和尝试找到了答案。对于所有面临我的问题的其他人,我发布了我的解决方案。我只需更改 web.xml 文件中的一行。我必须替换这段代码

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

用这个代码

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我什至不需要 spring-security.xml 文件中的这一行

<security:intercept-url pattern="/j_spring_security_check" access="permitAll"/>

希望这可以帮助某人。快乐编码...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Security登录返回404 的相关文章

  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • JSP 标记文件,输出其正文或将其返回到变量中

    我在 tag 文件中有一个自定义标签 用于计算并输出一个值 因为我无法在这里发布代码 所以我们假设一个简单的例子 文件 mytag tag 的内容 lt tag dynamic attributes dynamicParameters gt
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch

随机推荐