자 이제 조금은 헷갈릴 수 있는 부분입니다. 어려운 부분은 아니지만 하나하나 신경 써서 작업해야 하므로 조금 힘든 작업이 될 텐데요..

우선 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"로 변경하였기 때문에 모든 처리를 스프링 시큐리티 내부에서 처리하고 있습니다. 자세한 것은 뒤에서 다시 설명하도록 하겠습니다.

+ Recent posts