2014-09-02 5 views
1

스프링 보안 3.2.5로 보안을 설정하려는 웹 사이트 섹션 (/secure 아래의 모든 항목)이 있습니다.XML 구성의 스프링 보안이 사용자를 인증하지 않습니다.

@Controller 
@RequestMapping(value = "/secure") 
public class LoginController { 
    @RequestMapping(value = "/login", method = RequestMethod.GET) 
    public String getLogin() { 
     return "secure/login"; 
    } 

    @RequestMapping(value = "/home", method = RequestMethod.GET) 
    public String getHome() { 
     return "secure/home"; 
    } 
} 

및 로그인 페이지 내부 코드 :

나는이 컨트롤러가있는 사용자 정의 로그인 양식을 사용하려고 해요

<http use-expressions="true"> 
    <intercept-url pattern="/secure/login" access="permitAll" /> 
    <intercept-url pattern="/secure/**" access="isAuthenticated()" /> 
    <form-login default-target-url="/secure/home" always-use-default-target="true" login-page="/secure/login" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="user" password="password" authorities="ROLE_SECURE" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

: 나는 다음과 같은 XML 구성을 사용하고 있습니다

<form method="POST" action="<c:url value="/secure/login" />"> 
    username: <input type="text" name="username" /><br/> 
    password: <input type="password" name="password" /><br/> 
    <input type="submit" value="Login" /> 
</form> 

은 내가 web.xml 프록시 필터가 위임 ContextLoaderListenerspringSecurityFilterChain를 사용하여로드 된 보안 컨텍스트가 또한 설정.

/secure/login으로 리디렉션되는 /secure URL에 액세스하려고하면 내 컨트롤러가 getLogin 메서드에서 호출되고 로그인 페이지가 표시됩니다. 그게 다 괜찮아. 이제

내 문제 : 나는 로그인 양식을 제출 어떤LoginController로 직접 전송됩니다 내가 컨트롤러에는 POST 처리기가 없기 때문에 POST는 의미가 지원되는 방법이 아니라고 말하는 예외가 .

내가 컨트롤러에서이 같은 방법을 추가하는 경우 :

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public String postLogin() { 
    return "redirect:/secure/home"; 
} 

나는 더 이상 오류가 발생하지 않습니다하지만 내 postLogin 방법 호출 느릅 나무는 /secure/login에 저를 리디렉션하는 /secure/home 인증되지 않은 날을 보내고 난 원점으로 돌아가다.

내가 뭘 잘못하고 있는지 모르겠다. 내가 온라인으로 보는 모든 예제는 Java로 구성되어 있으며 사용하지 않는 것이 좋습니다. 일부 워크 플로는 일부 URL 경로 (본인의 경우 /secure)가 아닌 응용 프로그램의 컨텍스트에서 사용됩니다.

무엇이 누락 되었습니까?

답변

1

양식 워드 프로세서 (http://docs.spring.io/spring-security/site/docs/3.0.x/reference/appendix-namespace.html) :

기본 목표 URL 로의 : UsernamePasswordAuthenticationFilter의 defaultTargetUrl 속성에

지도. 설정되지 않은 경우 기본값은 "/"(응용 프로그램 루트)입니다. 사용자는 보안 리소스에 액세스하려고 시도 할 때 로그인하라는 요청을받지 않은 경우 로그인 한 후이 URL로 이동하게되며 원래 요청한 URL로 이동하게됩니다.

당신은 j_spring_security_check

<form name='loginForm' 
      action="<c:url value='j_spring_security_check' />" method='POST'> 
이 스프링 시큐리티에 의해 처리됩니다

에 양식을 제출해야하고 설정에 따라 사용자와 패스를 확인합니다. 이 예제를 참조하십시오. http://www.mkyong.com/spring-security/spring-security-form-login-example/

편집 : j_security_check도 지원해야합니다.

관련 문제