2016-11-08 91 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");  
} 
相關問題