[Spring] Spring Security 적용

Hayden·2025년 6월 26일

Spring MVC에 Spring Security를 사용하여 소셜 로그인을 구현해 봅니다.

1. 의존설 설치(Maven)

<!-- Spring Security -->
<dependencies>
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>5.7.2</version>
    </dependency>
</dependencies>

2. security-context.xml

/WEB-INF/spring/security-context.xml을 생성한 후 아래 Bean을 등록합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="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.xsd
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security.xsd">

  <http auto-config="true" use-expressions="true">

    <!-- 접근 허용할 URL 설정 -->
    <intercept-url pattern="/resources/**" access="permitAll" />
    <intercept-url pattern="/user/login" access="permitAll" />
    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" access="isAuthenticated()" />

    <!-- 로그인 폼 설정 -->
    <form-login
      login-page="/user/login"
      default-target-url="/"
      authentication-failure-url="/user/login?error=true"
    />

    <!-- 로그아웃 설정 -->
    <logout logout-success-url="/user/login?logout=true" />

  </http>

</beans:beans>

Security 설정을 마친 후 web.xml의 spring context에 등록해줍니다.

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

등록을 하는 이유는 DelegatingFilterProxty는 해당 이름의 빈을 Spring context에서 찾기 때문에 sercurity-context.xml이 context에 반드시 등록되어 있어야 합니다.

3. 필터 설정

/* 경로로 들어오는 모든 HTTP요청을 springSecurityFilterChain 필터를 사용해 가로채고 Spring Security로 전달합니다.

web.xml에 추가

  <!-- Spring Security 필터 등록 -->
  <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>
profile
백엔드 공부

0개의 댓글