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("/");
}
'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 |