indexController.java 에 함수를 만들어 보자.
다음과 같이 스프링 시큐리티 내에서는 login page, logout page 가 모두 미리 만들어져 있다.
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 하는 페이지로 이동하게 된다.
이 글은 유투버 데어 프로그래밍의 스프링 부트 시큐리티 강좌를 바탕으로 정리한 내용입니다.