자바 공부/스프링공부

스프링부트 시큐리티(Security) 6 config 작성방법

ari0930 2024. 9. 27. 01:02

스프링부트 시큐리티(Security) 6  config 작성방법

 

작성예시

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
                .csrf().disable()
                //csrf 비활성화
                .authorizeHttpRequests((request)-> {
                    request.requestMatchers("/user/**").authenticated();//인증이 필요하다.
                    request.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER") ;// 이러한 권한이 필요하다.
                    request.requestMatchers("/admin/**").hasRole("ADMIN");
                    request.anyRequest().permitAll(); //
                    

                }
                )

                //로그인페이지
                .formLogin((login)->{
                    login.loginPage("/login");
                })


                .build();



    }

}

 

 

HttpSecurity에서 사용할 수 있는 메서들은 아래와 같다.

1.authorizeHttpRequests ()

  • 각 요청에 대해서 접근 권한을 설정할 수 있게 해주는 메서드이다.

특정 경로를 인증 없이 이용하려면. permitAll()을 사용할 수 있는데

.requestMatchers("/public/**").permitAll()

public라는 경로는 인증업이 접근을 할 수 있다. 만약 특정하지 않고 모든 요청에 대해서 접근을 수락하고 싶다면. 

. anyRequest() 와. permitAll() 사용할 수 있다.

.anyRequest().permitAll()

 

만약 인증된 사용자만 접근하게 하기 위해서. authenticated()을. permitAll()  대시 이용하면 인증해야지만 접근하게 해 준다.

 

만약 특정 권한을 가진 사용자가 접속하게 만들고 싶다면. hasRole("권한 이름")을 이용할 수 있다.

 .requestMatchers("/admin/**").hasRole("ADMIN");

만약 여러 권한 사용자들이 모두 접근하게 하고 싶다면 hasRoles("권한 이름", "권한이름"...)을 이용할 수 있다.

이 hasRole를 이용할 때 자동으로 ROLE_이라는 접두사가 추간 된다는 걸 유의해야 한다.

 

접근을 금지하는 방법으로는. denyAll()을 이용하면 접근을 금지할 수 있다.

익명의 이용자들 즉 로그인하지 않는 유저들도 이용하게 만드는. anonymous()를 사용하면 된다.

.anyRequest().anonymous()

 

 

2. formLogin()

  • 커스텀 로그인 페이지를 사용할 수 있게 하면 성공 실패 후 동작도 설정 가능하다

사용자 정의 로그인 페이지 설정 

 

.loginPage("/login")

로그인 성공 후 이동할 페이지 설정

.defaultSuccessUrl("/home")

로그인 실패 시 failureUrl("이동할 주소") 이걸 이용하여 로그인 성공 후 페이지 이동처럼 사용가능.

 

로그인 성공/실패 시 핸들러 사용하게 하기 

http.formLogin().successHandler(new 정의한 핸들러());

http.formLogin().failureHandler(new정의한 핸들러());

 

 

3. logout()

http.logout()
    .logoutUrl("/logout")  // 로그아웃 URL 설정
    .logoutSuccessUrl("/login?logout")  // 로그아웃 후 이동할 페이지
    .invalidateHttpSession(true);  // 세션 무효화

 

4.remmemberMe()

 

tokenValiditySeconds() 은 스콘의 유효 시간을 초 단위로 설정할 수 있고 기본값은 2주로 지정된다.

http.rememberMe()
    .tokenValiditySeconds(604800);  // 1주 동안 유지

 

useSecureCookie()는 remmemberMe쿠키를 보안 쿠키로 설정할지 여부를 경정한다 기본값은 false

rememberMeCookieName("쿠키이름") 쿠키 이름을 지정할 수 있다.,

userDetailsService(사용할 서비스 구현) 자신이 원하는 서비스를 구현할 수 있다.

 

 

이것들 외에도 더 많은 메서드들이 존재한다.

 

 

로그인기본값은 

username : user

password : 이 값은 서버에 넣을 수 있는 값이 아래처럼 나온다.

 

반응형