[Spring_Security] 시큐리티 설정

JiMin LEE·2022년 11월 24일
0

스프링시큐리티

목록 보기
2/4

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();
        }
}
  • 강의에서는 WebSecurityConfigurerAdapter를 extends 했으나 이제는 지원하지 않아 위와 같이 코드를 변경했다.

0개의 댓글