상세 컨텐츠

본문 제목

스프링 시큐리티 프레임워크

안드로이드+드론 제작

by 김일국 2016. 1. 2. 22:53

본문

이번 시간에는 스프링(자바)에서 SSO 인증에 대한 부분을 심화 학습하도록 하겠습니다.

SSO 인증을 기존 스프링 시큐리티에서 어떻게 적용하는지 알아야 합니다.

그러기 위해서, 스프링 시큐리티 프레임워크에 대해서 먼저 학습하겠습니다.

# Spring Security의 보안요소 2가지

1. 인증(authentication)

2. 권한(authorization)

위 2가지는 java.security.Principal 인터페이스를 생성하게 구현하게 됩니다.

스프링은 이 프린시펄로 접근한 사용자가 권한을 가졌는지 검사할때,

사용자가 어떤 Role그룹에 속해 있는지 역할(Role)을 기반으로 권한을 체크하게 됩니다.

ROLE_ADMIN, ROLE_MANAGER, ROLE_USER 과 같이 역할을 할당하게 됩니다.


=============# 스프링 Security 프레임워크를 사용하기 위한 설정순서 #===============

1. Maven 설정파일에서 종속성(dependency) 추가

- www/pom.xml

- package 빌드시 라이브러리 dependency 파일들추가(아래 3.0.5버전은 프로젝트에 따라서 달라질수 있음)

>> -www/src/main/webapp/WEB-INF/lib (이폴더에 아래 jar 압축파일을 갖다놓고 이클립스에서 maven -package 하면된다)

>>> 상위/spring-security-core-3.0.5.RELEASE.jar

>>> 상위/spring-security-web-3.0.5.RELEASE.jar

>>> 상위/spring-security-config-3.0.5.RELEASE.jar


2. 클라이언트의 HTTP 요청에 대하여 보안을 적용하기 위해 web.xml 파일에 Spring Security 프레임워크가 제공하는 서블릿 필터를 추가

-www/src/main/webapp/WEB-INF/web.xml

>> 스프링 시큐리티 필터 서블릿 필수

<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>

    <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    </filter-mapping>


>> (참조) SSO필터 서블릿이 있다면...

<filter>

<filter-name>singleSignOnFilter</filter-name>

<filter-class>org.springframework.security.SingleSignOnFilter</filter-class>

<init-param>

<param-name>agent.name</param-name>

<param-value>www</param-value>

</init-param>

<init-param>

<param-name>agent.mode</param-name>

<param-value>reverse</param-value>

</init-param>

<init-param>

<param-name>idp.url</param-name>

<param-value>https://sso.uniondomain.kr</param-value>

</init-param>

<init-param>

<param-name>agent.redirect</param-name>

<param-value>false</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>singleSignOnFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


3. 보안관련 설정 xml파일을 웹애플리케이션 컨텍스트에 추가

-www/src/main/webapp/WEB-INF/web.xml

> 아래설정은 www/src/main/webapp/WEB-INF/classes/egovframework/spring/com/폴더에서

context-로 시작하는 모든 xml 파일을 웹애플리케이션 컨텍스트 설정으로 사용하겠다는 의미 입니다.

보통 context-security.xml 파일처럼 해당설정이 무슨 목적의 설정인지 구분값으로 사용 합니다.

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>

    </context-param>


4. 인증관리자에 사용자 인증 및 권한정보를 등록한다.

www/src/main/webapp/WEB-INF/classes/egovframework/spring/com/context-security.xml

> 아래와 같이 URL에 대한 요청을 가로챌 수 있도록 <http>요소를 추가 합니다. 여기서 auto-config=false 는 스프링 기본 로그인 페이지와 로그아웃 기능을 사용하지 않고, 사용자가 생성한 로그인페이지와 로그아웃 기능을 사용한다는 의미 입니다. 또한, 요청에 대해서, hsRole매서드로 사용권한도 확인 가능합니다.

<http auto-config="false">

        <intercept-url pattern="/**" requires-channel="any"  access="permitAll" />

   <intercept-url pattern="/usr/**/**.do" requires-channel="any" access="hasRole('ROLE::USR')"/>

      </http >

====== 여기서 url 패턴(pattern)에 대해서

* pattern="/user/**/**.do" 여기에서 

*, ** 는 Ant(메이븐이전빌드툴) 스타일의 패턴으로 그 의미는 아래와 같다.

- ?: 1개의 문자와 매칭

- *: 0개 이상의 문자와 매칭

- **: 0개 이상의 디렉터리와 매칭

위를 해석하자면, /user/ 경로에서 **/ 모든폴더 경로아래에 ** 모든폴더에서 .do 확장자를 매칭(매핑) 한다.

참고로 /로 끝나는 경우 별도로 지정한 디폴트서블릿 파일과 매칭(매핑)

그러고, 인증과 권한을 DB에서 체크하는 부분을 추가 합니다. (여기서는 jdbcService 라는 서비스 ID를 사용한다고 추가합니다.

<authentication-manager alias="authenticationManager">

        <authentication-provider user-service-ref="jdbcService">

        </authentication-provider>

    </authentication-manager>

5. jdbcService 서비스에 실제 쿼리가 존재하고, 그 쿼리 리턴값을 제일 처음에 언급한 java.security.Principal 멤버에 추가 하게 됩니다.


관련글 더보기

댓글 영역