본문 바로가기

study/java

[Spring Security] 스프링 시큐리티 설정

*스프링시큐리티설정 전 프로젝트 기본셋팅*


1. pom.xml에 의존성 추가

	<!-- Spring Security Core -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring Security Config -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring Security Web -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring Security JSP Custom Tags -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${spring.version}</version>
        </dependency>

 

2. Spring Security 설정파일 작성

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

//AbstractSecurityWebApplicationInitializer를 상속받는 클래스를 작성해야 스프링 시큐리티 필터들이 활성화된다.
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

}

SecurityWebApplicationInitializer.java

 

 

 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	
	//   /webjars/** 경로에 대한 요청은 인증/인가 처리하지 않도록 무시 (** = 모든경로)
	//아래 메소드는 인증/인가가 필요 없는 경로를 설정할 필요가 있을 때 오버라이딩
	@Override
	public void configure(WebSecurity web) throws Exception {
		web.ignoring().antMatchers("/webjars/**");
	}
	
	//아래 메소드는 인증/인가에 대한 설정
	//  /, /main에 대한 요청은 누구나 할 수 있지만, 
	//  그 외의 요청은 모두 인증 후 접근 가능
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
			.csrf().disable()
			.authorizeRequests()
			.antMatchers("/", "/main").permitAll()
			.anyRequest().authenticated();
	}
	
	//패스워드 인코더를 빈으로 등록.
	//암호를 인코딩하거나 인코딩된 암호와 사용자가 입력한 암호가 같은지 확인할때 사용
	@Bean
	public PasswordEncoder encoder() {
		return new BCryptPasswordEncoder();
	}
}

SecurityConfig.java

스프링 시큐리티를 이용해 로그인/로그아웃/인증/인가 등을 처리하기 위한 설정 파일

  • @EnableWebSecurity가 붙어 있을 경우 스프링 시큐리티를 구성하는 기본적인 빈(Bean)들을 자동으로 구성해준다.
  • WebSecurityConfigurerAdapter를 상속받으면, 특정 메소드를 오버라이딩 함으로써 좀 더 손쉽게 설정할 수 있다.

 

3. 보안 설정 테스트 컨트롤러 작성

@Controller
public class MainController {
	@RequestMapping("/main")
	@ResponseBody
	public String main() {
		return "main page";
	}
	
	@RequestMapping("/securepage")
	@ResponseBody
	public String securitypage() {
		return "secure page";
	}
}

 

http://localhost:8080/securityexam/main 실행모습

http://localhost:8080/securityexam/securepage 요청시

= 인증을 거쳐야 접근이 가능함



출처: https://ivory-room.tistory.com/19?category=875739 [개발로 자기개발]