java - Spring登录表单不起作用

标签 java spring jsp spring-mvc

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

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

安全配置.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>  

这是我的 Controller

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";  
 }  

}  

登录.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>  

最佳答案

由于/login 请求在 Controller 中返回“登录”

关于java - Spring登录表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259513/

相关文章:

java - 静态字段的 JUnit 初始化

Java EE Netbeans Maven EJB 模块 (MySQL) 错误

java - Thymeleaf th :field handle null with input text but not with radio, 为什么?

java - Spring @RepositoryRestController 导致 @PageableDefault 停止工作

spring - 无法在 Java Spring Boot 中使用用户管理身份访问应用程序配置

java - 如何在Android中禁用多次点击按钮

java - MySQL Workbench 6.0 错误无法为管理员获取管理权限?

java - 如何访问列表中的对象方法?

java - 未找到 JSP 2 标记文件 “/WEB-INF/tags”

java - 如何知道我的 Web 应用程序中仍在使用哪些类/方法 (eclipse)