Springboot - Security (2) 시큐리티 설정

leyuri·2020년 9월 17일
0

Springboot - Security

목록 보기
2/8

indexController.java 에 함수를 만들어 보자.

다음과 같이 스프링 시큐리티 내에서는 login page, logout page 가 모두 미리 만들어져 있다.

http://localhost:8080/

http://localhost:8080/user 로 접근하면 일반적으로 로그인한 사용자만 접근할 수 있도록

http://localhost:8080/index
로그인한 사용자만 접근할 수 있도록

http://localhost:8080/manger
로그인 한 사람 중에 manger 권한을 갖고 있는 있는 사용자만 접근할 수 있도록

이러한 설정들을 해주기 위해서는 config에 클래스를 하나 만들어주자.

SecurityConfig.java

package com.yuri.security1.config;

import org.springframework.context.annotation.Configuration;
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 
//스프링 시큐리티 필터가 스프링 필터체인에 등록이 됨, 스프링 시큐리티 필터가 SecurityConfig 이것을 말한다. 
//지금부터 등록할 필터가 기본 필터에 등록이 된다. 
public class SecurityConfig extends WebSecurityConfigurerAdapter{
	
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable() //csrf 토큰 비활성화 (테스트 시 걸어두는 게 좋음)
			.authorizeRequests()
			.antMatchers("/user/**").authenticated() // 해당 주소로 들어오면 인증이 필요함 
			.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasROLE('Role_MANAGER')")
			.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
			.anyRequest().permitAll() //이 3개 주소가 아니라면 권한이 허용된다. 
			.and()
			.formLogin()
			.loginPage("/login");
	}
}

http://localhost:8080/index,
http://localhost:8080/join는 잘 들어가지지만 http://localhost:8080/user로 접근하면 403 에러가 발생한다. 즉 로그인을 하지 않았기 때문에 접근권한이 없다는 뜻이다.

권한이 없는 페이지에 요청을 했을 때 로그인 페이지로 이동하기 위해 다음과 같은 코드를 추가해주었다.

.and()
.formLogin()
.loginPage("/login");

그럼 권한이 없을 때 login 하는 페이지로 이동하게 된다.


이 글은 유투버 데어 프로그래밍의 스프링 부트 시큐리티 강좌를 바탕으로 정리한 내용입니다.

profile
자기에게 매일 주어진 의무와 책임을 직시하고 실천하는 것이 자유이다.

0개의 댓글