권한부여(User, teacher, manager, admin)
권한 별 페이지 접근 가능 페이지 설정
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
AuthenticationManagerBuilder auth = http.getSharedObject(AuthenticationManagerBuilder.class);
auth
.inMemoryAuthentication()
// 보안상 안전하지 않으니 쓰지 말것을 당부하며 지원은 끊지 않겠다는 설명
.withUser(
User.withDefaultPasswordEncoder()
.username("user")
.password("1")
.roles("USER"))
.withUser(
User.withDefaultPasswordEncoder()
.username("teacher")
.password("1")
.roles("TEACHER"))
.withUser(
User.withDefaultPasswordEncoder()
.username("manager")
.password("1")
.roles("MANAGER"))
.withUser(
User.withDefaultPasswordEncoder()
.username("admin")
.password("3")
.roles("ADMIN"));
http
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(requests -> requests
.requestMatchers("/user/**").authenticated()// 인증되면 들어가는 주소
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/login").permitAll()
.anyRequest().authenticated())
.formLogin(login -> login
.loginPage("/login")
.loginProcessingUrl("/loginProcess")
.defaultSuccessUrl("/", true)
.permitAll())
.logout(logout -> logout
.permitAll());
return http.build();
로그인 에러 시 처리 설정
권한 별 페이지 접근 가능
.formLogin(login -> login .loginPage("/login")
.loginProcessingUrl("/loginProcess") //로그인 버튼 요청 시
.failureUrl("/login-error")//로그인 실패 시(요청 url)
.defaultSuccessUrl("/", true)
.permitAll())
@GetMapping("/login-error")
public String loginError() {
return "loginError";
} //jsp 이름과 같아야함!! 반드시 확인
One way vs Two way
Two way의 경우, UI와 상태가 상호작용, 잘못 바뀌는 부작용, 떨어지는 성능 등 => One way
@Controller : 컨트롤러는 사용자의 요청을 처리하고 해당하는 뷰 또는 데이터를 반환
@RestController : 배포위치 상관없음. 왜?? 반환값은 문자열(text, json 등) 뷰랜더링이 아닌 데이터 반환
@Service : 비즈니스 로직이 포함된 서비스 클래스(데이터 처리, 계산, 유효성 검사)
@Repository : 데이터 액세스 객체를 나타내며, 주로 데이터베이스와의 상호 작용을 담당, 주로 @Service
에서 사용되어 데이터베이스와의 통신을 추상화하고 예외를 처리하는 데 도움
Spring은 패턴학습이다. MVC패턴에 대한 구조 조직화