Pages

2014년 2월 17일 월요일

[SPRING] spring security 이용한 로그인 인증/권한 처리

로그인과 권한 부분을 개발 할려면 많은 노력이 든다. 
아이디와 패스워드를 비교해서 일치하면 세션에 값을 넣어주고 
또한 각 페이지별로 접근 권한도 처리 되어야 한다. 
"뭐 이리 복잡해!! 안해~~" 

그러나 spring security 사용하면 많은 부분이 지원되어 쉽게 개발을 할 수가 있다. 
"고뢔?" 

[Spring 강좌] 8회 - spring security 이용한 로그인 인증/권한 처리 


먼저 아이디 ,패스워드 필드로 회원 테이블을 만들어보자. 
sql 스크립트는 첨부파일에 있으니 실행시키면된다. 

 

 


데이터는 계정 아이디 "java" 패스워드"1112" 로 등록 하였다. 
 






자 회원테이블이 만들어졌다면 준비 작업은 끝났다. 



가장 먼저 spring security 제공된 서블릿을 사용해야 된다. 
그러기 위해서 web.xml에 filter 을 추가 한다. 

 





이제 security-context.xml을 추가 한다. 
 




security-context.xml의 내용이다 
login-page : 로그인 페이지 
default-target-url : 로그인 성공후 이동될 페이지 
authentication-failure-url : 로그인 실패시 이동될 페이지 
logout-success-url : 로그아웃 후 이동될 페이지 
<security:intercept-url pattern="/main.do" access="ROLE_USER" /> 
이 부분은 main.do 페이지는 권한이 "ROLE_USER" 로 로그인 한 사용자만 접근 가능하다는 의미 이다. 
memberService 는 DB에서 아이디 정보로 패스워드정보를 알기 위해 만들었다. 
 


MemberService 를 추가 해보자. 
 


MemberService 의 내용이다. 
loadUserByUsername(String username) 에서 
username은 로그인창에 입력한 아이디가 넘어 온다. 
그 아이디로 패스워드를 DB에서 읽어 오고 권한도 세팅한다. 
권한은 "ROLE_USER" 란 이름으로 되어 있다. 
 


그리고 아이디로 패스워드를 읽어오는 Dao도 추가 해보자 
 

 

 





이제 security-context.xml 에서 설정한 페이지를 만들자. 
먼저 Controller에 각각 추가 하였다. 
 

그리고 View을 추가 해보자. 
 



login.jsp 이다. 
아이디와 패스워드를 입력하여 전송하는 페이지다. 
다음 명칭은 spring security 에서 제공되므로 바꾸면 안된다. 
j_username : 로그인 아이디 
j_password : 로그인 패스워드 
j_spring_security_check : 로그인 처리 
 


로그인과 패스워드가 일치 하지 않을때 이동되는 페이지다. 
 


로그인 성공후 이동되는 페이지다. 
로그아웃시 이동되는 j_spring_security_logout 는 바꾸면 안된다. 
 


로그아웃 후 이동 되는 페이지다. 
 


이제 모든 페이지가 다 만들어졌다. 
web.xml 에서 filter 가 추가 되었고 
security-context.xml 와 MemberService 과 
그리고 각각의 페이지가 추가 되었다. 
MainDao 에서는 로그인 아이디로 패스워드를 읽어오는 메소드가 추가 되었다. 

그러나 로그인 처리 ,로그아웃 처리,권한 처리하는 부분은 만들지 않았다. 
이 부분은 spring security 에서 해주기 때문이다. 



자 이제 로그인이 되는지 확인해보자. 

서버를 시작하고 
 


로그인 페이지를 열어보자. 
 


먼저 잘못된 계정정보를 입력한 후 로그인 버튼을 눌러보자. 
 


security-context.xml 에 설정된 loginFail.do 페이지로 이동된다. 
 


자 이제는 올바른 계정정보를 입력하고 로그인 버튼을 눌러보자. 
 


main.do 페이지로 이동된다. 
로그인에 성공한것이다. 
이제 로그아웃 버튼을 눌러보자. 
 


로그아웃이 된 후에 
security-context.xml 에 설정된 logout.do 페이지로 이동되었다. 
 




그럼 여기서 궁금증 하나... 



권한이 없는 페이지에 접근하면 어떻게 될까? 





그 테스트를 하기 위해 MemberService에서 권한을 "ROLE_USER2"로 바꿔보고 
로그인 해보자. 
security-context.xml 의 설정에 의하면 main.do 페이지는 "ROLE_USER" 만 
접근 가능하다. 
 


"Access is Denied " 메지지가 뜨며 해당 페이지로는 접근이 안되는걸 
확인 할 수 있다. 


[출처:JAVA Project - Spring 강좌]

댓글 없음:

댓글 쓰기