Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全登录返回404_Java_Spring_Jsp_Spring Mvc_Spring Security - Fatal编程技术网

Java Spring安全登录返回404

Java Spring安全登录返回404,java,spring,jsp,spring-mvc,spring-security,Java,Spring,Jsp,Spring Mvc,Spring Security,我目前正在使用Spring框架编写我的博客。我正在为登录目的实现Spring安全性。在我提交始终返回404代码的登录凭据之前,一切都按预期进行 这是我的web.xml code <?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/

我目前正在使用Spring框架编写我的博客。我正在为登录目的实现Spring安全性。在我提交始终返回404代码的登录凭据之前,一切都按预期进行

这是我的web.xml code

<?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>

阿维斯普林
404
/404.html
上下文配置位置
/WEB-INF/spring-database.xml
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/管理员/*
org.springframework.web.context.ContextLoaderListener
春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
/        

这是我的spring安全代码:

<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 警告:在名为“spring”的DispatcherServlet中找不到URI为[/avispring/login]的HTTP请求的映射

注意:

<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>
  • 我使用的是spring 4.2.1和spring security 4.0.2
  • 大多数论坛都指向上下文路径,即[appname/login][appname/j\u spring\u security\u check],我认为我的也可以
  • 请帮忙

    更新:

    <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>
    
    当我使用log4j时,表单提交时的调试输出如下:

    login-processing-url="/j_spring_security_check"
    
    DEBUG: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-测试处理程序映射[org.springframework.web.servlet.mvc.method.annotation]。RequestMappingHandlerMapping@16fffcf]在名为“spring”的DispatcherServlet中 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping-查找路径/登录的处理程序方法 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping-未找到[/login]的处理程序方法 调试:org.springframework.web.servlet.DispatcherServlet-测试处理程序映射[org.springframework.web.servlet.handler]。BeanNameUrlHandlerMapping@138f01b]在名为“spring”的DispatcherServlet中 调试:org.springframework.web.servlet.handler.BeannameulHandlerMapping-找不到[/login]的处理程序映射 调试:org.springframework.web.servlet.DispatcherServlet-测试处理程序映射[org.springframework.web.servlet.handler]。SimpleUrlHandlerMapping@1ff154c]在名为“spring”的DispatcherServlet中 调试:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping-未找到[/login]的处理程序映射 警告:org.springframework.web.servlet.PageNotFound-在名为“spring”的DispatcherServlet中找不到URI为[/avispring/login]的HTTP请求的映射 DEBUG:org.springframework.web.servlet.DispatcherServlet-已清除线程绑定请求上下文:org.apache.catalina.connector。RequestFacade@c8b445 调试:org.springframework.web.servlet.DispatcherServlet-已成功完成请求 调试:org.springframework.web.context.support.XmlWebApplicationContext-在WebApplicationContext中为命名空间“SpringServlet”发布事件:ServletRequestHandleEvent:url=[/avispring/login];客户端=[0:0:0:0:0:0:0:0:1];方法=[POST];servlet=[spring];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[null];时间=[3ms];状态=[确定] 调试:org.springframework.web.context.support.XmlWebApplicationContext-根WebApplicationContext中的发布事件:ServletRequestHandleEvent:url=[/avispring/login];客户端=[0:0:0:0:0:0:0:0:1];方法=[POST];servlet=[spring];会话=[BC0FB7E62DC0AFABD8EF72B8BF1CED54];用户=[null];时间=[3ms];状态=[确定] DEBUG: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-测试处理程序映射[org.springframework.web.servlet.mvc.method.annotation]。RequestMappingHandlerMapping@16fffcf]在名为“spring”的DispatcherServlet中 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping-查找path/404.html的处理程序方法 调试:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping-为[/404.html]:[{[/404.html]]找到1个匹配的映射 调试: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.ServlettInvocableHandlerMethod-使用参数[]调用[HelloController.errorPage]方法 调试:org.springframew
    <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>
    
    <security:intercept-url pattern="/j_spring_security_check" access="permitAll"/>