1) 커스터 마이징을 위한 security-context.xml 속성들
- 스프링 시큐리티는 <form-login> 속성을 이용하면 해당 페이지에서 로그인 할 수 있도록 한다.
login-page |
로그인 페이지 주소를 지정 |
username-parameter |
로그인 페이지 form에 있는 username을 저장할 변수이름 지정 (ID값) |
password-parameter |
로그인 페이지 form에 있는 password를 저장할 변수이름 지정 |
login-processing-url |
로그인 페이지 form에 action에 입력할 주소 지정
ex) <form name="loginform" method="post" action="loginProcess">
|
default-target-url |
로그인 성공시 호출할 주소 지정 |
authentication-failure-url |
로그인 실패시 호출할 주소 지정 |
always-use-default-target |
security-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<http pattern="/resources/**" security="none"></http>
<http auto-config='true'>
<intercept-url pattern="/login_duplicate" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/loginInvalidCheck" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
<form-login login-page="/login"
username-parameter="id"
password-parameter="pw"
login-processing-url="/loginProcess"
default-target-url="/loginInvalidCheck"
authentication-failure-url="/login"
always-use-default-target='true'
/>
<session-management>
<concurrency-control max-sessions="1" expired-url="/login_duplicate"/>
</session-management>
</http>
<beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/>
<authentication-manager>
<authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>
<beans:bean id="customAuthenticationProvider" class="com.ex.Manage.security.CustomAuthenticationProvider"/>
<beans:bean id="securityService" class="com.ex.Manage.security.CustomServiceImpl"/>
<beans:bean id="securityDAO" class="com.ex .Manage.security.CustomDAO"/>
</beans:beans>
- 자 이제 각각의 속성들을 차근차근 알아가 보고 해당 프로젝트에 맞게 적용하자
<http pattern="/resources/**"security="none"></http>
resorces 폴더 안에 있는 파일들은 security 대상이 아니라는 것을 나타낸다. 즉 필터를 거치지 않게 된다.
이 설정을 넣지 않으면 로그인 화면의 CSS와 각종 리소스 파일들이 먹히지 않게된다.
<intercept-url pattern="/login_duplicate" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/loginInvalidCheck" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
URL에 접근시 필요한 권한을 나타낸다.
사실 <intercept-url>을 설정할 때도 약간의 생각을 해야된다. <intercept-url pattern="/**" access="ROLE_USER"/>
이 속성엔 위의 IS_AUTHENTICATED_ANONYMOUSLY 권한인 페이지들도 포함한다.
그렇기 때문에 위에 미리 ROLE_USER가 아닌 url들의 접근 권한을 설정해줘야 한다.
그렇지 않으면 form-login은 계속 login페이지를 호출하고 intercepter-url에선 login페이지는 접근 권한이 없다고 하고
계속 반복되면서 무한루프처럼 된다. 그러면 웹사이트 접속이 불가해진다.
<session-management>
<concurrency-control max-sessions="1" expired-url="/login_duplicate"/>
</session-management>
중복 로그인을 방지하기 위한 설정이다.
max-sessions |
중복 로그인이 가능한 세션 수/ 1로 지정해야 중복 로그인을 방지한다. |
expired-url |
중복 로그인 발생시, 먼저 로그인한 세션이 끊어지고 끊어진 상태에서 모든 url을 호출할 경우 끊어진 원인을 알려줄 주소를 지정한다. |
error-if-maximum-exceeded |
원래는 먼저 로그인한 사용자의 세션이 끊어지지만 true로 설정할 경우 첫번째 로그인이 아닌 세션이 살아 있는 상태에서의 로그인은 거부된다. |
<authentication-manager>
<authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>
<beans:bean id="customAuthenticationProvider" class="com.ex.Manage.security.CustomAuthenticationProvider"/>
권한을 확인하는 곳이다. 전 장의 기본예제에서는 아이디와 비밀번호 모두 guest로 설정되어 있었지만
여기서는 아래 빈의 경로에 있는 클래스 파일에서 권한확인 작업을 하겠다는 뜻이다.
여기까지 security-context.xml파일을 프로젝트에 맞게 변경하는 과정이었다.
다음장에는 <form-login>에서 아이디와 비밀번호를 받아 자바에서 어떻게 처리하는지를 알아보자
'플밍 is 뭔들 > SPRING' 카테고리의 다른 글
[SPRING] 스프링 기본 프로젝트 파일 분석 (0) | 2017.06.21 |
---|---|
[SPRING] 빈(Bean) 관련해서 오류가난다면? (0) | 2016.12.27 |
[SPRING SECURITY] 4.스프링 시큐리티 로그인 커스터마이징 (0) | 2016.12.27 |
[SPRING SECURITY] 2.스프링 시큐리티 security-context.xml 알아보기 (0) | 2016.12.27 |
[SPRING SECURITY] 1.스프링 시큐리티 기본세팅 (0) | 2016.12.27 |