로그인과 권한 부분을 개발 할려면 많은 노력이 든다.
아이디와 패스워드를 비교해서 일치하면 세션에 값을 넣어주고
또한 각 페이지별로 접근 권한도 처리 되어야 한다.
"뭐 이리 복잡해!! 안해~~"
그러나 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 강좌]
댓글 없음:
댓글 쓰기