스프링 시큐리티는 로그인 기능, 관리자 권한 등과 같은 기술을 좀 더 간편하게 구현할 수 있는 도구입니다. 기존에는 세션과 인터셉터를 이용하여 개발자가 수동으로 관련 로직을 만들어야 했지만 스프링 시큐리티 기능을 이용하면 몇 가지 설정으로 기능을 구현할 수 있습니다.
스프링 시큐리티 버전 설정
<!-- 스프링 시큐리티 버전 명시 -->
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.1.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.2</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
<spring.security.version>4.1.3.RELEASE</spring.security.version>
</properties>
스프링 시큐리티의 버전은 4.1.3을 사용하며 스프링 버전은 시큐리티의 버전보다 높아야 합니다.
dependency
<!-- Spring Security 사용을 위한 dependency -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<!-- Spring Security 사용을 위한 dependency -->
스프링 시큐리티에 필요한 dependency 들입니다.
web.xml 파일에 아래 코드를 차례대로 작성합니다.
스프링 시큐리티 설정 파일 추가
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security/security-context.xml
</param-value>
</context-param>
스프링 시큐리티의 설정 파일이 될 security-context.xml의 경로를 추가합니다.
리스너
<!-- 세션이벤트 처리 관련 리스너 -->
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</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>
web.xml 에서 시큐리티 주요 설정 파일의 경로를 /WEB-INF/spring/security/security-context.xml로 했으므로 security 폴더를 만들어서 security-context.xml 파일을 만들어 아래 코드를 작성합니다.
기능 설정
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 정적 리소스 파일 -->
<sec:http pattern="/css/**" security="none" />
<sec:http pattern="/img/**" security="none" />
<sec:http pattern="/js/**" security="none" />
<!-- 인터셉터, 권한, 로그인 기능 설정 -->
<sec:http auto-config='true' use-expressions="true">
<!-- 인터셉터 경로 설정 -->
<sec:intercept-url pattern="/login" access="permitAll" />
<sec:intercept-url pattern="/**" access="isAuthenticated()" />
<!-- 폼 로그인 설정 -->
<sec:form-login login-page="/login"
login-processing-url="/login/check"
default-target-url="/success"
username-parameter="userId"
password-parameter="password"
authentication-failure-url="/login?error"
always-use-default-target='true' />
<!-- 로그아웃 설정 -->
<sec:logout invalidate-session="true"
logout-url="/logout"
logout-success-url="/login?logout" />
<!-- 세션 관련 설정 -->
<sec:session-management>
<sec:concurrency-control max-sessions="1"
expired-url="/login"
error-if-maximum-exceeded="true"/>
</sec:session-management>
<!-- 보안 관련 설정 -->
<sec:csrf/>
</sec:http>
<!-- 권한 관리 -->
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user name="user" password="1234" authorities="ROLE_USER"/>
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
</beans>
뭔가 여러 가지 태그들이 있는데 이 xml파일 하나로 인터셉터, 관리자 권한, 로그인 등의 기본 설정이 가능하다는 점에서 좀 더 간편하게 기능을 구현할 수 있다는 점이 스프링 시큐리티의 장점입니다.
[Spring] 스프링 AOP 기능 사용하기 (0) | 2020.12.11 |
---|---|
[Spring] 스프링 타일즈(tiles) 설정하기 (2) | 2020.12.11 |
[Spring] 스프링 트랜잭션의 정의와 설정하기 (0) | 2020.10.22 |
[Spring] 스프링 프로젝트의 기본적인 작동 순서 (0) | 2020.09.30 |
[Spring] 스프링과 마이바티스 연동하기 (0) | 2020.09.28 |