<intercept-url>의 access속성을 지정할 때 일일이 집어넣어야 하는데 권한이 세분화되어 있으면 불편할 것입니다. Spring EL을 이용하면 편하게 할 수 있습니다.

다음과 같은 표현식을 이용할 수 있습니다. http태그의 use-expressions="true"속성을 추가해야 사용할 수 있습니다.

 

추가하지 않고 사용하면 restart 할 때 아래와 같이 표현식을 지원하지 않는다는 오류가 발생합니다.

 

설정 파일의 내용을 다음과 같이 수정합니다. 

 

<security:http auto-config="true" use-expressions="true">
		<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
		<security:intercept-url pattern="/member/login"	access="permitAll"/>
		<security:intercept-url pattern="/index.do"	access="permitAll"/>
		<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')"/>		
		<security:form-login
			username-parameter="id"
			password-parameter="pass"
			login-page="/emp/login"
			default-target-url="/index.do"
			authentication-failure-url="/member/login?fail=true"
		/>	
		<security:logout delete-cookies="true"
			logout-success-url="/emp/login"
			logout-url="/emp/logout"	
			invalidate-session="true"	
		/>					
	</security:http>

 

access속성을 변경한 후 logout태그에도 속성을 추가합니다.

 

최종 설정파일

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:security="http://www.springframework.org/schema/security"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
	<security:http auto-config="true" use-expressions="true">
		<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
		<security:intercept-url pattern="/member/login"	access="permitAll"/>
		<security:intercept-url pattern="/index.do"	access="permitAll"/>
		<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')"/>		
		<security:form-login
			username-parameter="id"
			password-parameter="pass"
			login-page="/emp/login"
			default-target-url="/index.do"
			authentication-failure-url="/member/login?fail=true"
		/>	
		<security:logout delete-cookies="true"
			logout-success-url="/emp/login"
			logout-url="/emp/logout"	
			invalidate-session="true"	
		/>						
	</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>
</beans>

변경 후에도 /index.do, 로그인 로그아웃, 관리자 계정(admin/admin)으로 로그인한 후에 관리자 페이지 요청하기 등이 변경 전과 동일하게 잘 실행되면 됩니다.

 

+ Recent posts