Upload
ymtech
View
530
Download
6
Embed Size (px)
DESCRIPTION
Spring Security : Sping Framework 기반 인증,권한 프레임워크
Citation preview
㈜유미테크3 ㈜유미테크 Spring security
1. 소개 • Servlet Filter 기반으로 작동
– 사용자의 요청을 가로채서 전처리 하거나 서버의 응답을 가로채서 후처리할 수 있다 .
– http 엘리먼트의 auto-config 어트리뷰트를 사용하면 Spring Se-curity 는 일련의 필터체인을 구성한다
㈜유미테크4 ㈜유미테크 Spring security
• Filter 적용
ClientDispatcher
Servlet
HandlerMapping
Controller
ViewResolverView
ModelAndView
1. 처리요청(URL)
2. 요청 URL 과 매핑되는
Controller 검색
3. 처리요청
4. ModelAndView 지원5. Controller 의 실행결과를
보여줄 View 검색
6. 응답
출력
Filter
1. 소개
㈜유미테크5 ㈜유미테크 Spring security
1. 소개• 필터 체인필터 설명SecurityContextPersistenceFilter SecurityContextRepository 에서 SecurityContext 를 로드하고 저장하는
일을 담당함
LogoutFilter 로그아웃 URL 로 지정된 가상 URL 에 대한 요청을 감시하고 매칭되는 요청이 있으면 사용자를 로그아웃시킴
UsernamePasswordAuthentication-Filter
사용자명과 비밀번호로 이뤄진 폼기반 인증에 사용하는 가상 URL 요청을 감시하고 요청이 있으면 사용자의 인증을 진행함
DefaultLoginPageGeneratingFilter 폼기반 또는 OpenID 기반 인증에 사용하는 가상 URL 에 대한 요청을 감시하고 로그인 폼 기능을 수행하는데 필요한 HTML 을 생성함
BasicAuthenticationFilter HTTP 기본 인증 헤더를 감시하고 이를 처리함
RequestCacheAwareFilter 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청을 재구성하는데 사용됨
SecurityContextHolderAwar-eRequestFilter
HttpServletRequest 를 HttpServletRequestWrapper 를 상속하는 하위 클래스 (SecurityContextHolderAwareRequestWrapper)
AnonymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자가 아직 인증을 받지 못했다면 요청 관련 인증 토큰에서 사용자가 익명 사용자로 나타나게 됨
SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체와 관련한 모든 세션들이 트래킹되도록 도움
ExceptionTranslationFilter 이 필터는 보호된 요청을 처리하는 동안 발생할 수 있는 기대한 예외의 기본 라우팅과 위임을 처리함
FilterSecurityInterceptor 이 필터는 권한부여와 관련한 결정을 AccessDecisionManager 에게 위임해 권한부여 결정 및 접근 제어 결정을 쉽게 만들어 줌
㈜유미테크6 ㈜유미테크 Spring security
2. 설정 – 라이브러리 추가 • pom.xml
<!-- security 적용 --><dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${org.springframework-version}</version></dependency>
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${org.springframework-version}</version></dependency>
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${org.springframework-version}</version></dependency>
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>${org.springframework-version}</version></dependency>
㈜유미테크7 ㈜유미테크 Spring security
2. 설정 – security filter 적용• web.xml
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/root-context.xml /WEB-INF/spring/security-context.xml </param-value></context-param>
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter>
<filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping>
㈜유미테크8 ㈜유미테크 Spring security
2. 설정 – security 설정• security-context.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/security http://
www.springframework.org/schema/security/spring-security.xsd">
<security:http auto-config="true"> <security:intercept-url pattern="/*" access="ROLE_USER" /></security:http>
<security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name=“user" password=“user" authorities="ROLE_USER"/> </security:user-service> </security:authentication-provider></security:authentication-manager>
</beans>
인증
권한부여
㈜유미테크10 ㈜유미테크 Spring security
2. 설정 – 기본 로그인 페이지 변경 • security-context.xml
<security:http auto-config="true" use-expressions="true"> <security:intercept-url pattern="/login" access="permitAll" /> <security:intercept-url pattern="/*" access="hasRole('ROLE_USER')" /> <security:form-login login-page="/login“ authentication-success-handler-ref="loginAuthenticationSuccessHandler" authentication-failure-handler-ref="loginAuthenticationFailureHandler" /> <security:logout logout-success-url="/login“ invalidate-session="true” /> </security:http>
<security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="defaultAuthenticationProvider"/></security:authentication-manager>
<bean id="defaultAuthenticationProvider" class="com.study.spring.security.UserAuthenticationProvider" />
<bean id="loginAuthenticationSuccessHandler" class="com.study.spring.security.LoginAuthenticationSuccessHandler"></bean><bean id="loginAuthenticationFailureHandler" class="com.study.spring.security.LoginAuthenticationFailureHandler"></bean>
인증 실패
로그인 페이지인증 성공
로그아웃
로그인 페이지 권한 설정
㈜유미테크12 ㈜유미테크 Spring security
3. Expression Language (EL)• security-context.xml
– 설정
– 표현식• hasIpAddress(ip) : 접근자의 IP 주소가 매칭하는지 확인• hasRole(role) : 역할이 부여된 권한과 일치하는지 확인• hasAnyRole(role,role) : 부여된 역할 중 일치하는 항목이 있는지
확인– 조건
• permitAll : 모든 접근자를 항상 승인• denyAll : 모든 사용자의 접근을 거부• anonymous : 사용자가 익명 사용자인지 확인• authenticated : 인증된 사용자인지 확인• rememberMe : 사용자가 remember me 를 사용해 인증했는지 확인• fullyAuthenticated : 사용자가 모든 크리덴셜을 갖춘 상태에서
인증했는지 확인
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/*" access="hasRole('ROLE_USER')" /></security:http>
㈜유미테크13 ㈜유미테크 Spring security
• 표현식 생성– SecurityExpressionOperations
인터페이스 구현– 표현식 메서드 정의
– AbstractSecurityExpressionHandler 클래스 상속
– Handler 에서 SecurityExpressionRoot 생성을 MyWebSe-curityExoressionRoot 클래스 객체로 생성
3. Expression Language (EL)
㈜유미테크14 ㈜유미테크 Spring security
• 표현식 생성– security-context.xml
3. Expression Language (EL)
<security:http auto-config="true" use-expressions="true" > <security:intercept-url pattern="/login" access="permitAll" /> <security:intercept-url pattern="/*" access="test('ROLE_MIRA')" /> <security:form-login login-page="/login“/> <security:logout logout-success-url="/login"/> <security:expression-handler ref="myWebSecurityExpressionHandler"/> </security:http>
<bean id="myWebSecurityExpressionHandler“ class="com.study.spring.security.MyWebSecurityExpressionHandler"></bean>
“test” 표현식 사용
ExpressionHandler 등록
ExpressionHandler 클래스 bean 등록
㈜유미테크16 ㈜유미테크 Spring security
5. 인증 - AuthenticationProvider 구현• AuthenticationProvider 구현
• security-context.xml
<security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="defaultAuthenticationProvider"/></security:authentication-manager>
<bean id="defaultAuthenticationProvider" class="com.study.spring.security.UserAuthenticationProvider" />
public class UserAuthenticationProvider implements AuthenticationProvider {
@Overridepublic Authentication authenticate(Authentication authentication)throws AuthenticationException {
// TODO Auto-generated method stubreturn null;
}
@Overridepublic boolean supports(Class<?> authentication) {
// TODO Auto-generated method stubreturn false;
}
authentication-provider 등록