주소 설정하고 SecurityConfig 설정하기
주소 설정
시큐리티가 인증이 없다면 모든 페이지 이동을 막기 때문에
인증이 필요없는 페이지는 주소에 /auth 붙여서 인증없이 들어갈 수 있도록 해야한다.
- 인증이 안된 사용자들이 출입할 수 있는 경로를 /auth/** 허용
- 그냥 주소가 / 이면 index.jsp 허용
- static 이하에 있는 /js/** , /css/**, /image/** 도 허용
일부만 예를들자면
[UserController]
@GetMapping("/auth/joinForm")
@GetMapping("/auth/loginForm")
▶ 회원가입, 로그인 페이지도 인증 없이 들어가야한다
[UserApiController]
@PostMapping("/auth/joinProc")
▶ 회원가입 post매핑에도 /auth 하고 주소변경
[heder.jsp]
네브바에 있는 [로그인, 회원가입] 주소에 /auth 붙여서 인증 필요없도록 만들고
로그인 후 네브바에 있는 [글쓰기, 회원정보, 로그아웃]은 인증이 필요해서 /auth 붙이지 않는다
SecurityConfig 설정
** config 패키지 - SecurityConfig 클래스 생성
SecurityConfig 오버라이드 하기
// 빈 등록 : 스프링 컨테이너에서 객체를 관리할 수 있게 하는 것
@Configuration // 빈등록(loC 관리)
@EnableWebSecurity // 시큐리티 필터 추가 = 스프링 시큐리티가 활성화가 되어 있는데 어떤 설정을 해당파일에서 하겠다
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/","/auth/**", "/js/**", "/css/**","/image/**")
.permitAll()
.anyRequest() // 나머지 요청들은
.authenticated(); // 인증이 되어야한다.
.and()
.formLogin()
.loginPage("/auth/loginForm");
}
}
** 혹시나 WebSecurityConfigurerAdapter 에 밑줄이 그어져있다면.
spring security 5.7이상에서 더 이상 WebSecurityConfigurerAdapter 사용을 권장하지 않는다고 한다.
HttpSecurity 클래스의 메서드 설명
리소스(url)의 권한 설정을 할 수 있다.
- .authorizeRequests() : request 요청이 들어오면 보안검사 시작
- .antMatchers : 특정 소스에 대해 권한 설정인데 .permitAll() 이 붙으면 antMatchers 설정한 리소스의 접근을 인증절차 없이 허용
- .anyRequest() : 나머지 요청들의 리소스(url)들은
- .authenticated() : 인증해야 접근가능
- .and() 인증이 필요하기 때문에 로그인 페이지로 이동
.formLogin() : form 로그인 방식
.loginPage("/auth/loginForm"); : 로그인 페이지의 주소
▶ .antMatchers("/","/auth/**", "/js/**", "/css/**","/image/**")
인증절차 없이 허용가능하도록 한 주소
"/auth/**" 이외 다른 주소들은 왜 포함했는지?
회원가입 할때 자바스크립트 ajax 를 이용했고 회원가입 후 "/" 메인주소로 이동하는데 인증절차 없이 모두 이동가능하도록
▶ anyRequest() 부터 이어서 읽자면
/auth 가 아닌 나머지 요청들은 인증을 해야 접근이 가능하고 인증이 필요하기에 로그인 페이지로 바로 이동한다
그래서 http://localhost:8000/ 주소를 치면 .loginPage("/auth/loginForm") 로그인 페이지로 이동
시큐리티 어노테이션 꼭 붙어있어야하는 세트 설명
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration 어노테이션은 빈에 등록하는 annotation (loC 관리) 이다.
@EnableWebSecurity 어노테이션은 웹보안 활성화를위한 annotation 이고
스프링 시큐리티가 활성화가 되어 있을때 어떤 설정을 해당파일(SecurityConfig)에서 하겠다 라는 말인데
즉 시큐리티 필터가 등록이 된다.
@EnableGlobalMethodSecurity(prePostEnabled = true) 어노테이션은 특정 주소로 접근을 하면 권한 및 인증을 미리 체크하겠다.
이 세개의 어노테이션은 세트다.
'Spring boot | 블로그 만들기' 카테고리의 다른 글
스프링 시큐리티 로그인 | UserDetails , getAuthorities() 람다식 (0) | 2022.11.13 |
---|---|
비밀번호 해쉬화 하여 회원가입하는 법 (0) | 2022.11.12 |
스프링 시큐리티 로그인 | 사용자 정보 가져오기 principal (0) | 2022.11.09 |
로그인 방식 | 세션을 이용한 로그인 (0) | 2022.11.09 |
회원가입 | Ajax를 사용하는 이유 , Service, Dto (0) | 2022.11.06 |