Spring Security 설정 완벽 가이드 — web.xml + security-context.xml 예제 총정리
Spring Security는 Java 웹 애플리케이션에서 인증(Authentication)과 인가(Authorization)을 처리하는 강력한 프레임워크입니다.
이번 포스팅에서는 web.xml의 필터 등록부터 security-context.xml의 구체적인 설정까지,
예제 코드와 함께 하나씩 살펴보겠습니다.
1️⃣ web.xml에 Spring Security 필터 등록
Spring Security를 사용하려면, 먼저 DelegatingFilterProxy를 web.xml에 등록해야 합니다.
이 필터는 Spring 컨테이너에서 관리되는 springSecurityFilterChain을 서블릿 필터 체인에 연결하는 역할을 합니다.
<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 필터 체인을 거치게 됩니다.
2️⃣ security-context.xml 설정
다음은 Spring Security의 주요 설정을 담은 security-context.xml 예제입니다.
정적 리소스는 보안 필터를 거치지 않도록 하고, 로그인/로그아웃, 세션 관리, 접근제어를 포함합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:security="http://www.springframework.org/schema/security"
xmlns="http://www.springframework.org/schema/beans"
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-4.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<!-- 정적 리소스는 보안 필터 적용 제외 -->
<security:http pattern="/resources/**" security="none"/>
<security:http pattern="/images/**" security="none"/>
<security:http pattern="/font/**" security="none"/>
<security:http pattern="/js/**" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/**.jsp" security="none"/>
<!-- 로그인/로그아웃 및 인증 설정 -->
<security:http pattern="/**" auto-config="true" use-expressions="true"
authentication-manager-ref="userProvider">
<security:form-login
login-page="/login.do"
username-parameter="mbrId"
password-parameter="mbrPwd"
authentication-failure-url="/login.do"
login-processing-url="/loginProc.do"
default-target-url="/login.do"
always-use-default-target="true"
authentication-success-handler-ref="loginSuccessHandler"
authentication-failure-handler-ref="loginFailureHandler"/>
<security:logout
logout-url="/logout.do"
delete-cookies="JSESSIONID"
success-handler-ref="logoutHandler"/>
<security:session-management>
<security:concurrency-control
max-sessions="100"
expired-url="/login_duplicate"
error-if-maximum-exceeded="false"/>
</security:session-management>
<security:access-denied-handler ref="accessDeniedHandler"/>
</security:http>
<!-- 로그인/로그아웃/예외처리 핸들러 정의 -->
<bean id="logoutHandler" class="com.cmmn.security.logoutHandler"/>
<bean id="accessDeniedHandler" class="com.cmmn.security.CustomAccessDeniedHandler">
<property name="errorPage" value="/accessDenied"/>
</bean>
<bean id="loginSuccessHandler" class="com.cmmn.security.LoginSuccessHandler"/>
<bean id="loginFailureHandler" class="com.cmmn.security.LoginFailureHandler"/>
<bean id="adminLoginFailureHandler" class="com.cmmn.security.AdminLoginFailureHandler"/>
<!-- 사용자 인증 Provider 등록 -->
<bean id="customAuthenticationProvider" class="com.cmmn.security.CustomAuthenticationProvider"/>
<security:authentication-manager id="userProvider" alias="userProvider">
<security:authentication-provider ref="customAuthenticationProvider"/>
</security:authentication-manager>
</beans>
3️⃣ 주요 설정 요약
- Filter 등록: DelegatingFilterProxy로 Spring Security 필터 체인 연결
- 정적 리소스 제외: JS, CSS, 이미지 등은 보안 필터 제외
- form-login: 로그인 페이지, 파라미터 이름, 성공/실패 핸들러 지정
- logout: 로그아웃 URL 및 쿠키 삭제 설정
- session-management: 동시 접속자 제한 및 중복 로그인 처리
- access-denied-handler: 접근 거부 시 이동할 페이지 지정
- authentication-manager: 사용자 정의 인증 Provider 등록
✅ 정리
이 설정을 통해 Spring Security는 모든 요청을 필터 체인에서 제어하며,
로그인, 로그아웃, 세션 제어, 접근 권한 처리를 통합적으로 관리합니다.
각 기능별 핸들러를 커스터마이징하면 로그인 성공/실패 로직이나 접근제어 로직을 세밀하게 제어할 수 있습니다.
댓글
댓글 쓰기