[Security] 시큐리티 프로젝트 로그인 - Security 설정 클래스 파일 생성
https://oneseok.tistory.com/61
[Security] 시큐리티 프로젝트 로그인 - 생성 및 프로젝트 설정
이번에 프로젝트 스프링 시큐리티를 이용하여 로그인 처리를 연습해보는 프로젝트를 만들어보려고한다. 최대한 어렵지 않게 내가 이해한데로 기록을 남기려고 한다. 1. 프로젝트 생성 - 일단
oneseok.tistory.com
저번시간에 경우 시큐리티 프로젝트 생성 및 기본 설정에 관해 다뤄보았다.
이번시간에는 Spring Security의 설정 클래스 파일을 만들고 동작까지 확인해 볼 것이다.
추가로 현재 사용하려는 템플릿엔진인 "mustache" 에 관한 ViewResolver도 설정할 것이다.
ViewResolver를 따로 설정하는 이유는 mustache를 사용하기 위해 gradle에 설정해 두었다면 기본적으로 ViewResolver가 잡히긴한다.
prefix는 상관없지만 suffix 부분이 ".mustache" 가 아니라 ".html" 파일을 사용할 것 이기에 따로 설정하는 것이다.
기본 ViewResolver
templates (prefix)
.mustache (suffix)
1. SecurityConfig 파일 생성
- "config" 패키지를 만들고 "SecurityConfig" 클래스 파일을 만들자
- 시큐리티 설정을 담당할 클래스 파일을 만드는 것이다, 이렇게 하면 기본 디폴트 설정을 걷어내고 내가 원하는데로 설정이 가능해진다.
- WebSecurityConfigurerAdpter 를 상속받아 configure메소드 구현하기
- 설명을 조금 덧붙히자면
▶ /user/~ 로 들어오는 요청은 인증이 필요하다.
▶ /manager/~ 로 들어오는 요청은 인증 및 "ROLE_ADMIN" 또는 "ROLE_MANAGER" 권한이 필요하다.
▶ /admin/~ 로 들어오는 요청은 인증 및 "ROLE_ADMIN" 권한이 필요하다.
▶ 3가지 URL 패턴 외에 다른 요청은 모두 허가한다.
http.csrf().disable();
이 설정을 해줘야 포스트맨 이나 안드로이드 기기에서 요청이 가능해진다!!
API 테스트나 실제 요청같은걸 위해서 꼭 disable() 해두자
@EnableWebSecurity
해당 어노테이션으로 스프링 필터체인에 시큐리티 필터가 등록되게 한다.!!
이제 요청이 올때마다 시큐리티 필터에 먼저 걸려 검사를 할 것이다.
2. ViewResolver 작성하기
- ViewResolver를 설정하지 않으면 /templates/~.mustache 파일을 찾는다. 우리는 html파일을 사용 하기에 필요
- config 패키지 밑에 "WebMvcConfig" 클래스를 만들자
- "WebMvcConfig" 파일 내용을 작성하자.
MustacheViewResolver resolver = new MustacheViewResolver();
resolver.setCharset("UTF-8");
resolver.setContentType("text/html; charset=UTF-8");
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
registry.viewResolver(resolver); //뷰 리졸버 등록
내용을 좀 설명하자면 인코딩을 UTF-8 , ContentType은 text/html 로 설정하고
prefix의 경우 "프로젝트경로/templates/"
surfix의 경우 ".html" 로 설정하겠다는 뜻이다.
3. Controller 작성하기
- controller 패키지를 생성후 안에 'TestController" 클래스 파일을 만들자
- 컨트롤러에 매핑주소를 작성하자
- 테스트를 해보기 위해 "/user" 로 url를 치고 들어가보자
- 403 에러가 뜰텐데 이건 권한이 없어 뜨는것이다!!
- 우리가 "SecurityConfig" 에 "/user/~" 요청은 로그인 한후 권한을 얻어야 된다고 했기 때문이다.
- 권한을 얻기위한 로그인 처리를 위해 다음단계를 따라보자
- 먼저 User 엔티티를 만들어 로그인과 회원가입할때 써보자
- 당연하지만 회원가입을 해야 로그인이 가능하기 때문
- 권한을 얻기위해 로그인 페이지 , 회원가입 페이지 에 해당하는 Controller와 html 파일을 만들자
- 먼저 컨트롤러에 내용을 추가하면 에러가 날것이다 , 필요한 Bean들이 아직 컨트롤러에 없기때문!
- User 엔티티와 관련한 setter는 getter는 아마 오류 안날것인데 나는 도메인을 만들기전에 Controller를 먼저 작성했기에 오류가 났다.
- 필요한 Bean 들을 컨트롤러 안에서 주입받자
- 생성자 주입방식으로 Bean 객체를 주입 받기위해 @RequiredArgsConstructor 어노테이션을 사용 하였고 이를 위해 final 키워드를 꼭 넣어야한다.
- BCryptPasswordEncoder 는 Main이 있는 클래스에 Bean 등록을 미리 해두어야한다.
- 로그인 및 회원가입 처리를 위한 "UserRepository" 를 만들자
- 빨간줄 에러는 신경쓰지 말자
- Spring data Jpa 사용을 위해 상속받기
- 간단하게 로그인 ,회원가입을 위한 C,R 테스트를 하기 위해 설정한다.
4. 로그인 , 회원가입 HTML 파일 만들기
- 컨트롤러와 매핑되는 joinForm 과 , loginForm 두개의 html을 생성하자
- joinForm.html 작성
- loginForm.html 작성
- 여기에서 name = "username"은 꼭 username으로 해줘야 추후 로그인 처리에서 인식가능하다!!
(변경하지 말자 일단 , 변경가능하게 하는 설정은 "SecurityConfig" 에서 설정해야함)
- 그리고 action 부분에는 꼭 "/login" 이라고 설정해야 시큐리티가 가로채서 로그인 처리를 진행한다.
이번 시간은 여기서 마치겠다.
이번시간은 Security 설정과 로그인 , 회원가입에 필요한 설정들을 일부 하였다.(아직 다안함 ^^..)
다음 시간에는 설정을 이어서 하고 회원가입 로그인 처리를 진행 하겠다.