SecurityConfig 설정
IndexController
package com.example.security1.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //View를 return
public class IndexController {
//localhost:8080/
//localhost:8080
@GetMapping({"","/"})
public String index() {
// 머스테치 기본폴더 src/main/resources/
// 뷰리졸버 설정 : templates (prefix), .mustache (suffix) 생략가능
return "index"; // src/main/resources/templates/index.mustache
}
@GetMapping("/user")
public @ResponseBody String user() {
return "user";
}
@GetMapping("/admin")
public @ResponseBody String admin() {
return "admin";
}
@GetMapping("/manager")
public @ResponseBody String manager() {
return "manager";
}
//SecurityConfig 를 생성후 자동으로 SpringSecurity에 의해 나오던 로그인 화면이 나오지 않게 된다.
@GetMapping("/login")
public @ResponseBody String login() {
return "login";
}
@GetMapping("join")
public @ResponseBody String join() {
return "join";
}
@GetMapping("/joinProc")
public @ResponseBody String joinProc() {
return "회원가입 완료";
}
}
IndexController에
권한별 페이지를 가정하여 추가해 주었다.
SecurityConfig
package com.example.security1.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity // 스프링 시큐리티 필터(SecurityConfig)가 스프링 필터체인에 등록이 된다.
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests()
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER")
.requestMatchers("/admin/**").hasAnyRole("ADMIN")
.anyRequest().permitAll()
return http.build();
}
}
SecurityConfig의 SecurityFilterChain을 생성해 주어 권한 별 설정을 해주었다.
강의에서 보던 문법이 deprecated가 되어 아래의 링크를 참고하여 해결하였다.
https://sennieworld.tistory.com/109
login view가 더이상 SpringSecurity에 의해 나오던 로그인 화면이 나오지 않게 된다.
SecurityFilterChain을 설정한 후
login이라는 URI가 @GetMapping("/login")에 설정된 대로 덮어 써져서
.anyRequest().permitAll() 로 들어간 것 같다.
SecurityFilterChain에서
requestMatchers("/user/**").authenticated()를 설정해 주었기 때문에
인증되지 않은 자는 403으로 권한에 의해 거절된다고 나온다.
admin, manager 또한 권한에 의해 403으로 나온다.
두 개의 주소는
.anyRequest().permitAll()로 들어가서
접속이 가능하다.
SecurityConfig에 formLogin 설정 추가
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests()
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER")
.requestMatchers("/admin/**").hasAnyRole("ADMIN")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login");
return http.build();
}
formLogin() 설정을 추가한 뒤
index.html이 아닌 주소는 자동으로
login 페이지로 향하게 된다.
'자바 탐구' 카테고리의 다른 글
스프링) SpringSecurity - 4) Security 로그인 (0) | 2023.05.26 |
---|---|
스프링) SpringSecurity - 3) Security 회원 가입 (0) | 2023.05.26 |
스프링) SpringSecurity - 1) Security, Mustache 환경 설정 (0) | 2023.05.26 |
JPA) Entity의 연관 관계 - @ManyToMany - (0) | 2023.05.03 |
JPA) Entity의 연관 관계 - @OneToMany - (0) | 2023.05.03 |