Spring Security 3 - 맛보기와 기본 설정의 이해 에서 스프링 시큐리티가 디폴트로 제공하는 로그인 페이지를 본 적이 있을 것이다. 이 포스트에서는 이 디폴트 로그인 페이지를 우리가 개발한 로그인 페이지로 변경하는 방법을 알아보자.
우리가 개발한 로그인 페이지를 적용해 보기 전에 먼저 Spring Security 3 - 맛보기와 기본 설정의 이해 의 접근권한 설정방식을 SpEL 표현식을 사용해서 다음과 같이 수정해 보자.
1
2
3
4
| <security:http auto-config= "true" use-expressions= "true" > <security:intercept-url pattern= "/favicon.ico" access= "permitAll" /> <security:intercept-url pattern= "/*" access= "hasRole('ROLE_USER')" /> </security:http> |
우리가 개발할 로그인 페이지를 적용하는 절차를 요약하면 다음과 같다.
1. 로그인 페이지를 개발한다.
2. 로그인 페이지를 http 엘리먼트 내부의 <form-login> 엘리먼트에 설정해 준다.
3. 로그인 페이지 자체에 대한 적절한 접근 권한을 설정해 준다.
우리가 만든 로그인 페이지가 잘 적용되는지만 확인해 보기 위해서 아무 내용도 없는 login.jsp 를 만들고 기본설정을 아래와 같이 변경한 후에 로컬 서버에 배포해 보자. login.jsp 는 http://localhost:8080/login.jsp 로 접근할 수 있다고 가정한다.
1
2
3
4
5
| <security:http auto-config= "true" use-expressions= "true" > <security:intercept-url pattern= "/favicon.ico" access= "permitAll" /> <security:intercept-url pattern= "/*" access= "hasRole('ROLE_USER')" /> <security:form-login login-page= "/login.jsp" /> </security:http> |
브라우저에 http://localhost:8080 을 입력하면 우리가 개발한 로그인 페이지대신 다음과 같은 오류 화면이 나타날 것이다.
이와 같은 오류 화면이 보이는 이유는 방금 우리가 개발한 login.jsp 를 포함하는 모든 URL 접근시에 ROLE_USER 라는 접근권한을 필요하다고 다음과 같이 설정했기 때문이다.
<security:intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
따라서 /login.jsp URL 에 대해서는 모든 익명 사용자를 포함한 모든 사용자가 접근할 수 있도록 접근권한을 다음과 같이 설정해 줘야 한다.
1
2
3
4
5
6
| <security:http auto-config= "true" > <security:intercept-url pattern= "/favicon.ico" access= "permitAll" /> <security:intercept-url pattern= "/login.jsp" access= "permitAll" /> <security:intercept-url pattern= "/**" access= "ROLE_USER" /> <security:form-login login-page= "/login.jsp" /> </security:http> |
다시 배포한 후, 브라우저에 http://localhost:8080 을 입력해보자. login.jsp 로 리다이렉트되어 빈 화면이 보일 것이다. 이것으로 스프링 시큐리티가 제공하는 디폴트 로그인 페이지가 우리가 개발한 login.jsp 로 잘 변경된 것을 확인할 수 있다.
이제 login.jsp 가 사용자 아이디와 비밀번호를 입력받을 수 있도록 수정해줘야 하는데 몇 가지 기억해야할 사항이 있다. 사용자 아이디와 비밀번호 폼필드명과 폼이 서브밋되는 URL 은 UsernamePasswordAuthenticationFilter 에 기본적으로 설정된 것을 사용해야 한다. 물론 각 폼필드명과 서브밋되는 URL 을 변경할 수도 있지만 이 포스트에서는 변경하는 방법을 설명하지 않을 것이기 때문이다. UsernamePasswordAuthenticationFilter 에 디폴트로 설정된 필드명은 j_username, j_password 이고 서브밋 URL 은 j_spring_security_check 이다. 또 폼 서브밋시에는 POST 방식을 사용해야 한다. 그렇지 않으면 UsernamePasswordAuthenticationFilter 가 로그인 요청을 거부할 것이다.
지금까지 설명한 내용을 바탕으로 login.jsp 를 작성하면 다음과 같다.
1
2
3
4
5
6
7
8
9
| <head> <title></title> </head> <form action= "j_spring_security_check" method= "POST" > ID : <input type= "text" name= "j_username" size= "20" maxlength= "50" /><br /> Password : <input type= "password" name= "j_password" size= "20" maxlength= "50" /><br /> <input type= "submit" value= "Login" /> </form> |
지금까지 개발한 내용을 서버에 배포한 후 브라우저에 http://localhost:8080 를 입력하면 login.jsp 로 리다이렉트할 것이고 login.jsp 가 제공하는 폼에 guest/guest 를 입력하면 정상적으로 로그인되는 것을 확인할 수 있을 것이다.
[출처:http://springsource.tistory.com/]
댓글 없음:
댓글 쓰기