Spring Security登录返回404 [英] Spring Security login returns 404
问题描述
我目前正在使用Spring框架中的博客。我正在实现Spring Security以进行登录。一切都按预期工作,直到我提交始终返回404代码的登录凭据。
I am currently working on my blog in Spring framework. I am implementing the Spring Security for login purpose. Everything works as expected until I submit the login credentials which is always returning 404 code.
这是我的web.xml cod 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>
,控制台输出
2015年10月16日上午1:06:03 org.springframework.web.servlet.DispatcherServlet noHandlerFound
警告:找不到带有URI [/ avispring / login]的HTTP请求的映射名为spring的DispatcherServlet
注意:
- 我使用的是spring 4.2.1和spring security 4.0.2
- 大多数论坛都指向上下文路径,即 [appname / login] 或 [appname / j_spring_security_check] 我觉得我的确很合适
- I am using spring 4.2.1 and spring security 4.0.2
- Most of the forums are pointing to the context path i.e [appname/login] or [appname/j_spring_security_check] and I think mine is ok regarding it
请帮忙。 ..
更新:
当我使用log4j时,调试输出位于表单提交的时间如下:
when I used log4j, the debug output at the time of form submission is as follows:
DEBUG:org.springframework.web.servlet.DispatcherServlet - 绑定到线程的请求上下文:org .apache.catalina.connector.RequestFacade @ c8b445
DEBUG:org.springframework.web.servlet.DispatcherServlet - 名为'spring'的DispatcherServlet处理[/ avispring / login]的POST请求
DEBUG:org.springframework.web.servlet.DispatcherServlet - 测试处理程序映射[org。名为spring的DispatcherServlet中的springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@16fffcf]
DEBUG:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 查找处理程序方法path / login
DEBUG:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 找不到[/ login]的处理程序方法
DEBUG:org.springframework.web.servlet.DispatcherServlet - 在DispatcherServlet中测试处理程序映射[org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@138f01b],名称为'spring'
DEBUG:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping - 找不到[的处理程序映射] / login]
DEBUG:org.spr ingframework.web.servlet.DispatcherServlet - 在DispatcherServlet中测试处理程序映射[org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@1ff154c],名称为'spring'
DEBUG:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - 找不到[/ login]的处理程序映射
WARN:org.springframework.web.servlet.PageNotFound - 在DispatcherServlet中找不到带有URI [/ avispring / login]的HTTP请求的映射,名称为'spring'
DEBUG:org.springframework.web.servlet.DispatcherServlet - 清除线程绑定请求上下文:org.apache.catalina.connector.RequestFacade@c8b445
DEBUG:org.springframework.web.servlet.DispatcherServlet - 已成功完成请求
DEBUG:org.springframework.web.context.support.XmlWebApplicationContext - 在WebApplicationContext中发布名称空间'spring-servlet'的事件:ServletRequestHandledEvent:url = [/ avispring / login];客户= [0:0:0:0:0:0:0:1];方法= [POST];的servlet = [弹簧];会话= [BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户= [零]。时间= [3毫秒]; status = [OK]
DEBUG:org.springframework.web.context.support.XmlWebApplicationContext - 在Root WebApplicationContext中发布事件:ServletRequestHandledEvent:url = [/ avispring / login];客户= [0:0:0:0:0:0:0:1];方法= [POST];的servlet = [弹簧];会话= [BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户= [零]。时间= [3毫秒]; status = [OK]
DEBUG:org.springframework.web.servlet.DispatcherServlet - 绑定到线程的请求上下文:org.apache.catalina.core.ApplicationHttpRequest@bb82df
DEBUG:org.springframework.web。 servlet.DispatcherServlet - 名为'spring'的DispatcherServlet处理[/avispring/404.html]的POST请求
DEBUG:org.springframework.web.servlet.DispatcherServlet - 测试处理程序映射[org.springframework.web.servlet。名为'spring'的DispatcherServlet中的mvc.method.annotation.RequestMappingHandlerMapping@16fffcf]
DEBUG:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 查找路径/404.html $的处理程序方法b $ b DEBUG:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 找到1个匹配的[/404.html]映射:[{[/ 404.html]}]
DEBUG:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 返回处理程序方法[public org.springframewo rk.web.servlet.ModelAndView com.avispring.controllers.HelloController.errorPage()]
DEBUG:org.springframework.web.servlet.DispatcherServlet - 测试处理程序适配器[org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter @ 511db5]
DEBUG:org.springframework.web.servlet.DispatcherServlet - 测试处理程序适配器[org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter@1a86ee]
DEBUG:org.springframework.web.servlet .DispatcherServlet - 测试处理程序适配器[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@c26a5f]
DEBUG:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - 调用[HelloController]带参数的.errorPage]方法[]
DEBUG:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - 方法[errorPage]返回[ModelAndView:引用名为'/ 404'的视图; model is null]
DEBUG:org.springframework.web.servlet.DispatcherServlet - 渲染视图[org.springframework.web.servlet.view.JstlView:name'/ 404';名为spring的DispatcherServlet中的URL [/WEB-INF/jsp//404.jsp]]
DEBUG:org.springframework.web.servlet.view.JstlView - 使用模型呈现名称为/ 404的视图{}和静态属性{}
DEBUG:org.springframework.web.servlet.view.JstlView - 在InternalResourceView'/ 404'$ b $中转发资源[/WEB-INF/jsp//404.jsp] b DEBUG:org.springframework.web.servlet.DispatcherServlet - 清除线程绑定请求上下文:org.apache.catalina.core.ApplicationHttpRequest@bb82df
DEBUG:org.springframework.web.servlet.DispatcherServlet - 已成功完成请求
DEBUG:org.springframework.web.context.support.XmlWebApplicationContext - 在WebApplicationContext中发布名称空间'spring-servlet'的事件:ServletRequestHandledEvent:url = [/ avispring / 404.html];客户= [0:0:0:0:0:0:0:1];方法= [POST];的servlet = [弹簧];会话= [BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户= [零]。时间= [1毫秒]; status = [OK]
DEBUG:org.springframework.web.context.support.XmlWebApplicationContext - 在Root WebApplicationContext中发布事件:ServletRequestHandledEvent:url = [/ avispring / 404.html];客户= [0:0:0:0:0:0:0:1];方法= [POST];的servlet = [弹簧];会话= [BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户= [零]。时间= [1毫秒]; status = [OK]
DEBUG: org.springframework.web.servlet.DispatcherServlet - Bound request context to thread: org.apache.catalina.connector.RequestFacade@c8b445 DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'spring' processing POST request for [/avispring/login] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@16fffcf] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /login DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Did not find handler method for [/login] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler map [org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@138f01b] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping - No handler mapping found for [/login] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler map [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@1ff154c] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - No handler mapping found for [/login] WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/avispring/login] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.DispatcherServlet - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@c8b445 DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in WebApplicationContext for namespace 'spring-servlet': ServletRequestHandledEvent: url=[/avispring/login]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[spring]; session=[BC0FB7E62DC0AFABD8EF72B8BF1CED54]; user=[null]; time=[3ms]; status=[OK] DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[/avispring/login]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[spring]; session=[BC0FB7E62DC0AFABD8EF72B8BF1CED54]; user=[null]; time=[3ms]; status=[OK] DEBUG: org.springframework.web.servlet.DispatcherServlet - Bound request context to thread: org.apache.catalina.core.ApplicationHttpRequest@bb82df DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'spring' processing POST request for [/avispring/404.html] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@16fffcf] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /404.html DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Found 1 matching mapping(s) for [/404.html] : [{[/404.html]}] DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.web.servlet.ModelAndView com.avispring.controllers.HelloController.errorPage()] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter@511db5] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter@1a86ee] DEBUG: org.springframework.web.servlet.DispatcherServlet - Testing handler adapter [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@c26a5f] DEBUG: org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Invoking [HelloController.errorPage] method with arguments [] DEBUG: org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Method [errorPage] returned [ModelAndView: reference to view with name '/404'; model is null] DEBUG: org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name '/404'; URL [/WEB-INF/jsp//404.jsp]] in DispatcherServlet with name 'spring' DEBUG: org.springframework.web.servlet.view.JstlView - Rendering view with name '/404' with model {} and static attributes {} DEBUG: org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp//404.jsp] in InternalResourceView '/404' DEBUG: org.springframework.web.servlet.DispatcherServlet - Cleared thread-bound request context: org.apache.catalina.core.ApplicationHttpRequest@bb82df DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in WebApplicationContext for namespace 'spring-servlet': ServletRequestHandledEvent: url=[/avispring/404.html]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[spring]; session=[BC0FB7E62DC0AFABD8EF72B8BF1CED54]; user=[null]; time=[1ms]; status=[OK] DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[/avispring/404.html]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[spring]; session=[BC0FB7E62DC0AFABD8EF72B8BF1CED54]; user=[null]; time=[1ms]; status=[OK]
推荐答案
好的,这太令人沮丧,我找到了答案打击和审判。对于所有面临我问题的人,我发布了我的解决方案。我必须在我的web.xml文件中只更改一行。我不得不替换此代码
Ok that was so frustrating and I have found my answer by hit and trial. To all others who are facing my problem I am posting my solution. I had to change only one line in my web.xml file. I had to replace this code
<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文件中甚至不需要这一行
and I don't even need this line in spring-security.xml file
<security:intercept-url pattern="/j_spring_security_check" access="permitAll"/>
希望这对某些人有所帮助。快乐的编码......
Hope that might help somebody. Happy coding...
这篇关于Spring Security登录返回404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!