main.java.com.example.security1.controller.IndexController
packagecom.example.security1.controller;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
@Controller // view를 리턴하겠다
public classIndexController {
@GetMapping({ "", "/" }) // 이건 무슨 문법???
publicString index(){
return"index"; // 이 index 파일이 view가 된다.
}
@GetMapping("/user")
public@ResponseBody String user(){
return"user";
}
@GetMapping("/admin")
public@ResponseBody String admin(){
return"admin";
}
@GetMapping("/manager")
public@ResponseBody String manager(){
return"manager";
}
@GetMapping("/login")
public@ResponseBody String login(){
return"login";
}
@GetMapping("/join")
public@ResponseBody String join(){
return"join";
}
@GetMapping("/joinProc")
public@ResponseBody String joinProc(){
return"회원가입 완료됨!";
}
}
main.java.com.example.security1.config.WebMvcConfig
package com.example.security1.config;
import org.springframework.boot.web.servlet.view.MustacheViewResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
MustacheViewResolver resolver = new MustacheViewResolver();
resolver.setCharset("UTF-8"); // 내가 만든 view의 기본적인 인코딩은 utf-8
resolver.setContentType("text/html;charset=UTF-8"); // 내가 던지는 파일은 기본적으로 html 파일이다.
resolver.setPrefix("classpath:/templates/"); // 경로는 이렇게 이다.
resolver.setSuffix(".html");
registry.viewResolver(resolver); // registry로 뷰 리졸버를 설정하는 코드
}
}
main.java.com.example.security1.config.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 // 이 파일을 활성화 해주는 코드, 스프링 시큐리티 필터가 스프링 필터 체인에 등록된다.
public class SecurityConfig { // 여기서 스프링 시큐리티 필터는 이 SecurityConfig를 말한다.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws
Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll() // 1차 위처럼 명시된 역할을 가지고 있지 않으면 각 페이지로 접근할 수 없다 -> 403에러
.and()
.formLogin()
.loginPage("/login"); // 2차 여기서는 로그인이 되어있지 않으면 user, manager, admin 페이지에 접근할 시 login 페이지로 연결된다.
return http.build();
}
}