Notice
Recent Posts
Link
Tags
- springboot
- 스프링
- select
- spring security 6
- PYTHON
- 문자열
- 프로그래머스
- 자바
- Docker
- @transactional
- AWS
- DI
- 데이터베이스
- ORM
- string
- spring mvc
- join
- 스프링부트
- spring boot
- jpa
- mysql
- 1차원 배열
- sql
- SSL
- Git
- java
- Django
- nginx
- spring
- session
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[Spring Security] @PreAuthorize 본문
권한에 따른 페이지처리를 하고 싶다면 Principal 객체를 사용하는 메서드 위에 @PreAuthorize("isAuthenticated()") 어노테이션을 사용하면 된다.
Principal 객체를 사용하는 메소드에서 사용하지 않으면 500 에러가 발생한다. 이 오류는 Principal 객체가 널(null)값이라서 발생한 오류이다(콘솔을 확인하면 NPE가 반겨줄거다). Principal 객체는 로그인을 해야만 생성되는 객체이기 때문이다.
▶ isAuthenticated() : 로그인 → true | 로그아웃 → false
나의 경우 "로그인을 해야 게시글 또는 댓글을 달 수 있게 하고, 로그아웃 상태라면 로그인 페이지로 이동"하게 하고싶었다. 해당 따라서 해당 어노테이션을 적용하여 메서드가 실행되기 전 권한을 확인했다.
@PreAuthorize("isAuthenticated()")
@GetMapping("/create")
public String questionCreate(QuestionForm questionForm) {
return "question_form";
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/create")
public String questionCreate(@Valid QuestionForm questionForm,
BindingResult bindingResult,
Principal principal) {
if (bindingResult.hasErrors()) return "question_form";
SiteUser user = userService.getUser(principal.getName());
questionService.create(questionForm.getSubject(), questionForm.getSubject(), user);
return "redirect:/question/list";
}
그리고 @PreAuthorize 어노테이션이 동작할 수 있도록 SecurityConfig에 @EnableMethodSecurity(prePostEnabled = true)를 적용해야 한다.
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true) //@PreAuthorize 동작
public class SecurityConfig {
...
}
참고
'Java > Spring' 카테고리의 다른 글
[JPA Error] save할 때 @ManyToOne 필드가 null인 현상 (0) | 2023.01.07 |
---|---|
[Thymeleaf + Spring Security] sec:authorize (0) | 2023.01.06 |
[Spring Security] GrantedAuthority, SimpleGrantedAuthority (0) | 2023.01.04 |
[Spring Security] UserDetails, UserDetailsService (0) | 2023.01.03 |
[Spring Security] BCryptPasswordEncoder (0) | 2023.01.02 |
Comments