[Spring Security란]
Spring Security는 Spring 기반의 애플리케이션의 보안(인증(Authentication과 권한, 인가(Authorization) 등)을 담당하는 스프링 하위 프레임워크이다.
기본 동작방식으로는 서블릿의 필터와 인터셉터로 처리된다.
스프링기반의 어플리케이션의 보안을 담당하는 프레임워크로써 사용자인증과 권한에대한 강력한 기능을 갖게된다.
version
- spring boot 2.6.3
- jdk 1.8
- gradle 7.4.1
1. gradle 의존성추가
bulid.gradle 에 해당내용 추가 (어디서봤는데 버전은 다 맞춰주는게 좋다더라..)
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-web
implementation group: 'org.springframework.security', name: 'spring-security-web', version: '5.6.1'
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-config
implementation group: 'org.springframework.security', name: 'spring-security-config', version: '5.6.1'
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-core
implementation group: 'org.springframework.security', name: 'spring-security-core', version: '5.6.1'
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs
implementation group: 'org.springframework.security', name: 'spring-security-taglibs', version: '5.6.1'
2. spring security 설정
✔ spring security에대한 WebSecurity 설정을 해주는부분이다.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
public void configure(WebSecurity web) throws Exception{
// 스프링 시큐리티 룰을 무시하는 URL 규칙
web.ignoring()
.antMatchers("/js/**","/css/**","/images/**","/font/**","html/**");
/*
web.ignoring()
.antMatchers("/resources/**")
.antMatchers("/css/**")
.antMatchers("/vendor/**")
.antMatchers("/js/**")
.antMatchers("/favicon/**")
.antMatchers("/img/**");
*/
}
....
}
- 해당경로는 모두 spring security 가 무시할수있도록 설정한부분이다.
- 기본경로는 resource/static 이기때문에 해당경로를 잘 확인해야된다.
✔ spring security에대한 HttpSecurity설정을 해주는부분이다. (위의 config 클래스안에 들어간다)
....
@Override
protected void configure(HttpSecurity http) throws Exception{
//실제 스프링 시큐리티 규칙
http.authorizeHttpRequests()
.antMatchers("/**").permitAll()
.and()
.formLogin()
.loginPage("/login/form")
.usernameParameter("userId")
.passwordParameter("password")
.loginProcessingUrl("/login/perform")
.defaultSuccessUrl("/login/success")
.failureUrl("/login/fail")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login/logout")
.invalidateHttpSession(true)
.and()
.exceptionHandling().accessDeniedPage("/login/denied");
}
...
✨ antMatchers() 에대한 항목들
- hasRole() 또는 hasAnyRole() ➡ 특정권한을 가진 한명 또는 여러명 사용자만 접근가능
- hasIpAddress() ➡ 특정아이피주소만 접근가능
- permitAll() 또는 denyAll() ➡ 접근을 전부 허용하거나 거부
- isAnonymouse() ➡ 인증하지 않은 사용자가 접근가능
- isAuthenticated() ➡ 인증한 사용자가 접근가능
- rememberMe() ➡ 로그인한 사용자만 접근가능
'Framework > Spring Boot😊' 카테고리의 다른 글
[Spring Boot] 공공데이터 API 를 활용하여 DataBase 에 Scheduled를 통해 insert 하기 (0) | 2023.08.10 |
---|---|
[Spring Boot] Spring Security 의존성 추가 시 bulid.gradle 파일 에러 해결 (0) | 2023.07.25 |
[Spring Boot] 프로젝트 (3) - 이클립스 Spring Boot 프로젝트 구축 및 로그설정 (0) | 2023.07.13 |
[Spring Boot] sentry 를 스프링부트에 적용 (에러로그수집) (0) | 2022.09.21 |
[Spring] Spring 과 Spring Boot 차이 (0) | 2020.10.18 |