
2025-04-29
โ Spring Security๋ ์ธ์ฆ(Authentication) ๊ณผ ๊ถํ(Authorization) ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ณด์ ํ๋ ์์ํฌ์ด๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ API์ ์ ๊ทผ ์ ์ด, ์ธ์ ๊ด๋ฆฌ, CSRF, CORS, ํจ์ค์๋ ์ํธํ ๋ฑ์ ์ง์ํ๋ค.
@Secured, @PreAuthorize ๋ฑ)โ Spring Security๋ ํํฐ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ์ธ์ฆ๊ณผ ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
โ ์ธ์ฆ ํ๋ฆ ์์ฝ
HttpServletRequest ์ ๋ฌAuthenticationFilter๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ ์ํUsernamePasswordAuthenticationToken ๊ฐ์ฒด ์์ฑAuthenticationManager๋ก ์ ๋ฌAuthenticationProvider๋ก ์ ๋ฌUserDetailsService๊ฐ DB ์ฌ์ฉ์ ์ ๋ณด ์กฐํSecurityContextHolder์ ์ ์ฅAuthenticationSuccessHandler, ์คํจ ์ AuthenticationFailureHandler ์คํโ
Spring Security ์์กด์ฑ ์ถ๊ฐ (pom.xml)
<!-- CORE -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- WEB -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- CONFIG -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- TAGLIBS -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${org.springframework-version}</version>
</dependency>
โ
Spring Security ํํฐ ๋ฑ๋ก (web.xml)
<!-- SECURITY FILTER -->
<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>
โ
@EnableWebSecurity๋ฅผ ์ด์ฉํ Java Config ์ค์
package com.example.app.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity // Spring Security ์ค์ ํ์ฑํ
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// ๊ถํ ์ฒดํฌ
http.authorizeRequests()
.anyRequest().authenticated(); // ๋ชจ๋ ์์ฒญ์ ์ธ์ฆ ํ์
// ๋ก๊ทธ์ธ ์ค์
http.formLogin()
.permitAll(); // ๋ก๊ทธ์ธ ํ์ด์ง๋ ๋ชจ๋ ์ ๊ทผ ํ์ฉ
// ๋ก๊ทธ์์ ์ค์
http.logout()
.permitAll(); // ๋ก๊ทธ์์๋ ๋ชจ๋ ์ ๊ทผ ํ์ฉ
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ์ฉ์ ๊ณ์ ์์ ๋ฑ๋ก
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}1234") // {noop}: ์ํธํ ์์ด ๋น๋ฐ๋ฒํธ ์ฌ์ฉ
.roles("USER"); // ROLE_USER๋ก ์๋ ์ ๋์ฌ ์ถ๊ฐ
}
}
โ Spring Security๋
AuthenticationManager์ UserDetailsService๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ฒ์ฆํ๋ค.inMemoryAuthentication()๋ก ๊ฐ๋จํ ์ธ์ฆ ํ
์คํธ๋ฅผ ์งํํ ์ ์๋ค.