Spring Security 스프링 시큐리티 설정

Spring Framework설정

gradle

dependencies {
    // ...

    // security
    implementation 'org.springframework.security:spring-security-web:5.0.7.RELEASE'
    implementation 'org.springframework.security:spring-security-config:5.0.7.RELEASE'
    implementation 'org.springframework.security:spring-security-core:5.0.7.RELEASE'
    implementation 'org.springframework.security:spring-security-taglibs:5.0.7.RELEASE'
}
  • spring-security-web: Spring Security의 웹 지원 기능을 포함한 의존성입니다. 웹 애플리케이션에서 보안 관련 기능을 구현하는 데 사용됩니다.
  • spring-security-config: Spring Security의 구성 요소를 포함한 의존성입니다. Spring Security의 구성 클래스들을 사용하여 보안 구성을 정의하고 사용자 인증, 인가, 로그인 페이지 등을 구성할 수 있습니다.
  • spring-security-core: Spring Security의 핵심 기능을 포함한 의존성입니다. 인증, 인가, 보안 컨텍스트 등 Spring Security의 핵심적인 기능을 제공합니다.
  • spring-security-taglibs: Spring Security 태그 라이브러리를 포함한 의존성입니다. 이 라이브러리는 JSP 또는 Thymeleaf와 같은 템플릿 엔진에서 Spring Security 태그를 사용하여 보안 관련 태그를 쉽게 작성할 수 있도록 도와줍니다.

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>

...

<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>
  • Spring Security 필터를 적용하기 위해 `web.xml` 파일에 `DelegatingFilterProxy` 필터 적용
  • security-context.xml 파일 로딩 위해 추가

 


security-context.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 보안 설정 구성 -->
    <http>
        <!-- URL 패턴에 대한 접근 권한 설정 -->
        <intercept-url pattern="/admin/**" access="hasRole('ADMIN')"/>
        <intercept-url pattern="/user/**" access="hasRole('USER')"/>
        <!-- 로그인 페이지 설정 -->
        <form-login login-page="/login" default-target-url="/home" authentication-failure-url="/login?error=true"/>
        <!-- 로그아웃 설정 -->
        <logout logout-url="/logout" logout-success-url="/login?logout=true"/>
    </http>

    <!-- 사용자 인증 설정 -->
    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="admin" password="admin" authorities="ROLE_ADMIN"/>
                <user name="user" password="user" authorities="ROLE_USER"/>
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

스프링 시큐리티는 단독으로 설정할 수 있기 때문에, root-context.xml이나 servlet-context.xml과 별도로 작성이 가능합니다. 관리를 용이하게 하기 위해 따로 설정해주는 것이 좋습니다.

 

스프링 시큐리티가 동작하기 위해서는 최소한의 설정이 필요하다.

  • Authentication Manager 존재
  • 스프링 시작 지점이 필요하다.

 


Spring Boot 설정

implementation 'org.springframework.boot:spring-boot-starter-security'