자 이제 조금은 헷갈릴 수 있는 부분입니다. 어려운 부분은 아니지만 하나하나 신경 써서 작업해야 하므로 조금 힘든 작업이 될 텐데요..
우선 DB 연동하기 전에 우리가 설정한 권한대로 페이지가 보이는지부터 테스트해보도록 하겠습니다.
<security:http auto-config="true">
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<security:intercept-url pattern="/emp/login"
access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/>
<security:intercept-url pattern="/index.do" access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/>
<security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="user"
authorities="ROLE_USER" />
<security:user name="admin" password="admin"
authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
security-config_ver2.xml 설정 파일에 등록된 <authentication-manager> 엘리먼트가 인증정보를 등록하는 엘리먼트입니다.
<user-service> 엘리먼트에 등록된 <user> 엘리먼트가 인증될 사용자의 정보입니다.
당연히 이렇게 설정 파일에 사용자 정보를 등록하면 안 되겠죠? 아니 등록할 수 도 없습니다. 회원수가 몇 만, 몇 십만 인 경우는 어떻게 등록을 할 수 있겠어요? 후에 db에서 연동해서 인증하는 것으로 변경되어야겠죠? db인증은 조금 뒤에서 살펴보도록 하겠습니다. 지금은 스프링 시큐리티의 컨셉을 이해하고 살펴보기 위해 설정 파일에 인증 정보를 등록했고 설정 정보에 등록한 대로 user/user로 입력하면 ROLE_USER의 권한을 갖는 것이고 admin/admin으로 로그인하면 ROLE_ADMIN권한을 갖는 것입니다.
꼭 기억하세요.... 아직 DB 연동 상태가 아닙니다.
서버를 restart 하고 실행해보겠습니다.
첫 번째 화면인 index.do와 로그인 화면인 /emp/login.do 모두 요청이 잘 됩니다.
자 이제 user/user로 로그인을 해보겠습니다. DB 연동은 안되지만 권한에 따라 잘 response가 되어야 합니다. 즉, 우리가 [커뮤니티]를 선택하면 커뮤니티는 /**에 해당하므로 아래와 같이 인증 화면이 출력됩니다.
설정 파일에 등록한 user/user를 입력하고 [로그인] 버튼을 누르면 다음과 같이 잘 실행이 되어야 합니다.
이 상태에서 top메뉴의 [관리자]를 클릭하여 요청을 해보면 다음과 같이 오류가 response 됩니다.
관리자 메뉴를 선택하면 "/kimsaemERP/admin/index.do"가 요청됩니다.
"/admin/*"으로 요청하는 경우 "ROLE_ADMIN"의 권한을 갖고 있는 사용자만 접속할 수 있도록 하겠다고 설정 파일에 등록했습니다.
ROLE_ADMIN의 권한을 가진 사용자는 현재 아이디 "admin" 패스워드 "admin"을 입력하고 로그인한 사용자입니다.
이미 user/user로 로그인을 해서 로그인한 사용자의 권한은 "ROLE_USER"입니다.
"ROLE_USER"의 권한을 갖고 있기 때문에 당연히 "ROLE_ADMIN"의 권한으로 접근해야 하는 리소스는 접근할 수가 없겠죠?
그래서 "Access is denied"오류가 뜨는 것입니다.
top메뉴에서 [Logout]을 선택하여 세션을 종료한 후 다시 "admin/admin"을 입력하고 로그인합니다.
top메뉴에서 [관리자]를 선택하면 아래와 같이 관리자 페이지가 실행됩니다.
권한을 정의한 대로 접근을 제한하고 있는 것을 알 수 있습니다.
또한 "EmpController"의 login메서드와 logout메서드를 주석 처리하여도 로그인과 로그아웃 처리가 잘되고 있습니다. 로그인 시 요청되는 요청 url을
"/kimsaemERP/j_spring_security_check"로 변경하였기 때문에 모든 처리를 스프링 시큐리티 내부에서 처리하고 있습니다. 자세한 것은 뒤에서 다시 설명하도록 하겠습니다.
'보안 > Spring Security' 카테고리의 다른 글
[실습] 권한별로 접근 페이지 제어하기 - 일반적 방법 (0) | 2019.09.10 |
---|---|
스프링의 EL표기식으로 권한 변경하기 (0) | 2019.09.10 |
스프링 시큐리티 제외하기 - 이미지깨짐 해결 (0) | 2019.09.09 |
kimsaemERP의 loginPage로 인증하기 (0) | 2019.09.04 |
spring security따라해보기 (0) | 2019.09.04 |