16
㈜㈜㈜㈜㈜ Spring Security (Sping Framework ㈜㈜ ㈜㈜ , ㈜㈜ ㈜㈜㈜㈜㈜ )

Spring Security

  • Upload
    ymtech

  • View
    530

  • Download
    6

Embed Size (px)

DESCRIPTION

Spring Security : Sping Framework 기반 인증,권한 프레임워크

Citation preview

㈜유미테크

Spring Security(Sping Framework 기반 인증 ,

권한 프레임워크 )

㈜유미테크2 ㈜유미테크 Spring security

목차

1. 소개2. 설정3. Expression Language (EL)4. 인증

㈜유미테크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>

인증

권한부여

㈜유미테크9 ㈜유미테크 Spring security

2. 설정 – 기본 로그인 화면• 기본 로그인 화면

㈜유미테크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>

인증 실패

로그인 페이지인증 성공

로그아웃

로그인 페이지 권한 설정

㈜유미테크11 ㈜유미테크 Spring security

2. 설정 – 기본 로그인 페이지 변경

㈜유미테크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 등록

㈜유미테크15 ㈜유미테크 Spring security

4. 인증 (Authentication)

authenticate( )

㈜유미테크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 등록