Abh*_*sal 8 java spring jsp spring-mvc spring-security
我目前正在使用Spring框架中的博客.我正在实现Spring Security以进行登录.一切都按预期工作,直到我提交始终返回404代码的登录凭据.
这是我的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>
Run Code Online (Sandbox Code Playgroud)
这是我的春季安全码:
<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>
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
和控制台输出是
2015年10月16日上午1:06:03 org.springframework.web.servlet.DispatcherServlet noHandlerFound警告:在名为"spring"的DispatcherServlet中找不到带有URI [/ avispring/login]的HTTP请求的映射
注意:
请帮忙...
更新:
当我使用log4j时,表单提交时的调试输出如下:
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 /登录]; 客户= [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.method.annotation.ServletInvocableHandlerMethod - 方法[errorPage]返回[ModelAndView:引用名为'/ 404'的视图; model is null] DEBUG:org.springframework.web.servlet.DispatcherServlet - 渲染视图[org.springframework.web.servlet.view.JstlView:name'/ 404'; DispatcherServlet中的URL [/WEB-INF/jsp//404.jsp]],名称为'spring'DEBUG:org.springframework.web.servlet.view.JstlView - 使用模型{}和静态名称'/ 404'呈现视图attributes {} DEBUG:org.springframework.web.servlet.view.JstlView - 转发到InternalResourceView'/ 404'DEBUG中的资源[/WEB-INF/jsp//404.jsp]: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毫秒]; 状态= [OK] 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毫秒]; 状态= [OK] 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毫秒]; 状态= [OK] 时间= [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毫秒]; 状态= [OK] 时间= [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毫秒]; 状态= [OK]
好吧那太令人沮丧了,我通过点击和试用找到了答案.对于所有面临我问题的人,我发布了我的解决方案.我不得不在我的web.xml文件中只更改一行.我不得不替换这段代码
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
用这个代码
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
我甚至不需要spring-security.xml文件中的这一行
<security:intercept-url pattern="/j_spring_security_check" access="permitAll"/>
Run Code Online (Sandbox Code Playgroud)
希望可能对某人有所帮助.快乐的编码......
| 归档时间: |
|
| 查看次数: |
15257 次 |
| 最近记录: |