스프링부트 시큐리티(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 : 이 값은 서버에 넣을 수 있는 값이 아래처럼 나온다.
'자바 공부 > 스프링공부' 카테고리의 다른 글
스프링 - 이메일 인증 (0) | 2025.01.14 |
---|---|
스프링 부트 웹소켓 Stomp 사용법 (0) | 2024.09.19 |
스프링부트 Scheduled 사용법 (1) | 2024.09.17 |
스프링부트 메이븐 - MyBatis 사용법 (2) | 2024.09.04 |
Jpa를 이용하여 게시판 만들어 보기 4 (0) | 2024.08.31 |