<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)으로 로그인한 후에 관리자 페이지 요청하기 등이 변경 전과 동일하게 잘 실행되면 됩니다.
'보안 > Spring Security' 카테고리의 다른 글
[실습] 권한별로 접근 페이지 제어하기 - 스프링EL로 변경하기 (0) | 2019.09.10 |
---|---|
[실습] 권한별로 접근 페이지 제어하기 - 일반적 방법 (0) | 2019.09.10 |
로그인적용하기 - 권한확인 (0) | 2019.09.09 |
스프링 시큐리티 제외하기 - 이미지깨짐 해결 (0) | 2019.09.09 |
kimsaemERP의 loginPage로 인증하기 (0) | 2019.09.04 |