Spring登录表单不起作用

时间:2014-10-08 14:31:15

标签: java spring jsp spring-mvc

我试图了解Spring登录系统如何在互联网上运行一些示例。我面临许多困难。我的最新问题是即使我正确输入用户名和密码(它们设置在security-config.xml中),我也会被重定向到登录页面。

这是我到目前为止所做的事情(我只会向您展示相关代码)。

安全-config.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-3.1.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <http use-expressions="true">
      <intercept-url pattern="/login*" access="isAnonymous()" />
      <intercept-url pattern="/**" access="isAuthenticated()"/>

      <form-login 
         login-page='/login' 
         default-target-url="/profile" 
         authentication-failure-url="/login?error=true" />

      <logout logout-success-url="/login" />

   </http>
   <authentication-manager>
      <authentication-provider>
         <user-service>
            <user name="user1" password="user1Pass" authorities="ROLE_USER" />
         </user-service>
      </authentication-provider>
   </authentication-manager>
</beans:beans>

的web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee   
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">  

     <display-name>Sample Spring Maven Project</display-name>  

     <servlet>  
      <servlet-name>mvc-dispatcher</servlet-name>  
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
      <load-on-startup>1</load-on-startup>  
     </servlet>  

     <servlet-mapping>  
      <servlet-name>mvc-dispatcher</servlet-name>  
      <url-pattern>/</url-pattern>  
     </servlet-mapping>  

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

     <context-param>  
      <param-name>contextConfigLocation</param-name>  
      <param-value>  
       /WEB-INF/mvc-dispatcher-servlet.xml,  
       /WEB-INF/security-config.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>  


    </web-app>  

这是我的控制器

import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestParam;  


@Controller  
public class LoginController {  

 @RequestMapping("/login")  
 public String getLoginForm(Model model, @RequestParam(required = false) String error, String logout) { 

  if (error != null) {
      model.addAttribute("message", "Invalid username of password, try again !");  

  } else if (logout != null) {  

   model.addAttribute("message", "Logged Out successfully, login again to continue !");
  }  
  return "login";  
 }  

 @RequestMapping("/profile")  
 public String geProfilePage() {  
  return "profile";  
 }  

}  

的login.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<html>  
<head>  
<title></title>  
</head>  
<body>  
 <center>  

  <div  
   style="text-align: center; padding: 30px; border: 1px solid green; width: 250px;">  
   <form method="post"  
    action="<c:url value='j_spring_security_check' />">  

    <table>  
     <tr>  
      <td colspan="2" style="color: red">${message}</td>  

     </tr>  
     <tr>  
      <td>User Name:</td>  
      <td><input type="text" name="username" /></td>  
     </tr>  
     <tr>  
      <td>Password:</td>  
      <td><input type="password" name="password" /></td>  
     </tr>  
     <tr>  
      <td> </td>  
      <td><input type="submit" value="Login" /></td>  

     </tr>  
    </table>  
   </form>  
  </div>  
 </center>  
</body>  
</html>  

1 个答案:

答案 0 :(得分:1)

由于在/ login请求中在控制器中返回“login”,