Spring Security (1)

IndexController

  • 해당 메소드들은 컨트롤러에 있는 메소드들로 이루어져 있음.
  • 전체적인 설명은 아래와 같다.
    • 회원가입 폼에 있는 데이터를 받으면 그 데이터를 post 로 받음.
    • user 객체의 Role(권한)을 ROLE_USER로 지정.
    • rawPassword 는 사용자가 입력한 초기 비밀번호임. 
    • encPassword는 한번의 암호화가 진행된 비밀번호임.
    • 암호화가 진행된 번호를 다시 user 객체에 설정.
    • 설정이 끝난 user 객체를 데이터 베이스에 저장
@PostMapping("/join")
public String join(User user){
    System.out.println(user);
    user.setRole("ROLE_USER");
    String rawPassword = user.getPassword();
    String encPassword = bCryptPasswordEncoder.encode(rawPassword);
    user.setPassword(encPassword);
    userRepository.save(user);
    return "redirect:/loginForm";
};

  • @Secured 는 필요한 권한이 단일인 페이지에 지정하는 어노테이션임.
    • ROLE_ADMIN 권한을 가지고 있다면 페이지에 접근이 가능함. 
  • @PreAutorize 는 필요한 권한이 복수인 페이지에 지정하는 어노테이션임.
    • ROLE_ADMIN 권한을 가지고 있다면 페이지에 접근이 가능함.
    • ROLE_MANAGER권한을 가지고 있다면 페이지에 접근이 가능함.
//    @Secured("ROLE_ADMIN")
    @PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
    @GetMapping("/data")
    public @ResponseBody String data() {
        return "데이터정보";
    }

Config

  • @Configration 설정 파일이라는 선언을 하는 어노테이션이다.
  • @EnableWebSecurity 는 Security에 필요한 API를 불러오는 어노테이션이다.
  • @EnableGlobalMethodSecurity 는 Controller에 사용한 @Secured 와 @PreAuthorize 그리고 @PostAuthorize를 사용 할 수 있게 활성화 하는 어노테이션이다. 
  • WebSecurityConfigurationAdapter
    • 스프링 시큐리티의 웹 보안 기능을 초기화 및 설정가능케함.
    • HttpSecurity 라는 세부적인 보안기능을 설정할 수 있는 API를 제공함.
    • .csrf() 는 권한에 상관없이 모든 페이지를 접근 가능하게 해주는 메소드인데 .disable()을 사용하여 막았음.
    • " /user/** " 로 끝나는 페이지는 USER 권한을 가지면 접근이 가능하게 됨. (기본인증)
    • " /manager/** " 로 끝나는 페이지는 MANAGER, ADMIN 권한을 가지면 접근이 가능함. 
    • " /admin/** " 로 끝나는 페이지는 ADMIN 권한을 가지면 접근이 가능함. 
    • .anyRequest().permitAll() 그 외 나머지 페이지는 마음대로 접근이 가능함.
    • .formLogin()은 권한이 필요한 페이지에 아무런 권한이 없이 접근하면 자동으로 페이지 매핑이 되게 하는 메소드
    • .loginPage("/loginForm") 로그인 페이지로 매핑을 해줌.
    • .loginProcessingUrl("/login") 로그인 진행이 되었다면 해당 Url 호출.
    • .defaultSuccessUrl("/") 성공적으로 로그인시 해당 페이지로 이동.
  • @Bean 은 메소드의 반환값 Bean 타입으로 IoC에 등록하게 해주는 어노테이션이다.
    • @Configuration 과 @Component에서 사용이 가능한데 둘의 차이는 Bean타입으로 반환하냐 안하냐의 차이이다.
@Configuration
@EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 됨.
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) // secured 어노테이션 활성화, preAuthorize, postAuthorize 어노테이션 활성화
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean
    public BCryptPasswordEncoder encoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(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()
                .and()
                .formLogin()
                .loginPage("/loginForm")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/");
    }

 

 

 

 

 

 

 

Boot Security (2)

1편과 2편은 같이 봐야하니 1편을 보지 않았다면 아래 링크로 가서 보시길 바랍니다. Boot Security (1) IndexController 해당 메소드들은 컨트롤러에 있는 메소드들로 이루어져 있음. 전체적인 설명은 아

jamesblog95.tistory.com

 

'Backend > Security' 카테고리의 다른 글

CIA, RSA, RFC  (1) 2022.12.29
OSI 7계층과 TCP(전송 제어 프로토콜)  (0) 2022.12.29
Session(세션)과 Cookie(쿠키)  (0) 2022.12.29
Spring Security (2)  (0) 2022.12.29
Spring Boot Security 기본설정  (0) 2022.12.29