2016-11-08 162 views
2

我想使自己的登录表单。当我更改登录页面时,我无法打开它。谷歌浏览器告诉我,有太多的重定向到这个网页...使用自己的登录表单重定向过多 - Spring Security

我的代码:

@RequestMapping(value="/login", method = RequestMethod.GET) 
public ModelAndView loginPage() { 
    ModelAndView modelAndView = new ModelAndView("login"); 
    return modelAndView; 
} 

@RequestMapping(value="/loginError", method = RequestMethod.GET) 
public ModelAndView loginErrorPage() { 
    ModelAndView modelAndView = new ModelAndView("login"); 
    modelAndView.addObject("error", "true"); 
    modelAndView.addObject("msg", "invalid login credentials"); 
    return modelAndView; 
} 

设置:

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth.inMemoryAuthentication().withUser("user").password("user").roles("USER"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    http.csrf().disable().authorizeRequests() 
      .antMatchers("/**").access("hasRole('ROLE_USER')") 
      .and().formLogin().loginPage("/login").defaultSuccessUrl("/index").failureUrl("/loginError"); 
} 

和登录表单:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Insert title here</title> 
</head> 
<body> 
<c:if test="${error eq 'true'}"> 
    ${msg} 
</c:if> 
<form name='loginForm' action="<c:url value='j_spring_security_check' />" 
     method='POST'> 

    <table> 
     <tr> 
      <td>User Name:</td> 
      <td><input type='text' name='j_username' value=''> 
      </td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td><input type='password' name='j_password' /> 
      </td> 
     </tr> 
     <tr> 
      <td><input name="submit" type="submit" 
         value="submit" /> 
      </td> 
      <td><input name="reset" type="reset" /> 
      </td> 
     </tr> 
    </table> 

</form> 
</body> 
</html> 

你能告诉我问题在哪里吗?我学习了很多教程,但总是遇到同样的问题。对于许多重定向...

顺便说一句。的IntelliJ着决心:j_spring_security_chec

回答

2

当你需要允许请求到登录页面,否则它只是进入一个无限循环的手册中指出:

http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-form

我们必须向所有用户(即未经身份验证的用户)访问我们的日志页面 。所述formLogin()。permitAll()方法允许授予 用于基于形式日志相关联的所有URL的所有用户访问。

protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable().authorizeRequests() 
     .antMatchers("/**").access("hasRole('ROLE_USER')") 
      .and().formLogin().loginPage("/login").permitAll() 
       .defaultSuccessUrl("/index").failureUrl("/loginError");  
} 
相关问题