get방식은 오류가 안 걸리지만 post방식들은 오류가 나는 현상이 나타났습니다.
컴파일러도 조용 하고 디버깅 모드도 조용합니다.
하지만 게시글 작성을하면 403 권한 오류가 발생하는 문제가 생겼습니다.
GPT는 두루뭉실하게 의견을 제시해 주고 결국 제가 찾아 야합니다 현제까지
발견한 건 csrf 문제인 거 같습니다
스프링 시큐리티 설정에서 http.csrf(). disable();CSRF 공격방지 기능을 비활성화 문제 때문에 로그인 화면을 쓸 수가 없는 현상이 나타나서
지금 오류 해결 문제 때문에 골 썩히고 있습니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
MemberService memberService;
@Override
protected void configure(HttpSecurity http) throws Exception{
http.formLogin()
.loginPage("/members/login")
.defaultSuccessUrl("/")
.usernameParameter("email")
.failureUrl("/members/login/error")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/members/logout"))
.logoutSuccessUrl("/")
;
http.authorizeRequests()//페이지 권한 추가
.mvcMatchers("/css/**", "/js/**", "/img/**").permitAll()
.mvcMatchers("/", "/members/**", "/board/**", "/images/**").permitAll()//
.mvcMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()//
;
일단 게시글 작성 뷰단에
<meta id="_csrf" name="_csrf" th:content="${_csrf.token}"/>
<meta id="_csrf_header" name="_csrf_header" th:content="${_csrf.headerName}"/>
추가 안 했다는 걸 확인하고 추가하고 실행했지만
@PostMapping
주소값 안에 admin/board/save로 넣어서 실행해도 똑같은 오류가 걸렸습니다.
작성 뷰 단에
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(function() {
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
});
추가해봤습니다. 이것도 여전히 오류
2일 동안 이것저것 만져 보다 결국 최후의 수단을 사용했습니다.
http.csrf().disable();
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
MemberService memberService;
@Override
protected void configure(HttpSecurity http) throws Exception{
http.formLogin()
.loginPage("/members/login")
.defaultSuccessUrl("/")
.usernameParameter("email")
.failureUrl("/members/login/error")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/members/logout"))
.logoutSuccessUrl("/")
;
http.authorizeRequests()//페이지 권한 설정
.mvcMatchers("/css/**", "/js/**", "/img/**").permitAll()
.mvcMatchers("/", "/members/**", "/board/paging","/board/{id}","/board/save", "/images/**").permitAll()//
.mvcMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
;
http.csrf().disable();//csrf 토큰 방어 중지
http.exceptionHandling()//페이지 권한
.authenticationEntryPoint
(new CustomAuthenticationEntryPoint())
;
http.csfr(). disable(); 이것은 이제 스프링 시큐리티의 CSRF 보호 기능을 비활성화하는 코드입니다 결국 보호막 비활성화죠 이거까진 안 쓸려고 했지만 결국 썼습니다... 찝찝한 느낌이 드는군요 그리고 이제 post가 들어가는 곳들은 scrf가 들어가는 태그들을 다 주석처리 했습니다.
<!-- <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">-->
이러고 나니 이제 잘 작동을 하더군요 대신 보안을 다른 방법으로 보충을 합시다 해당 id 값을 인식해서 해당 게시글 수정버튼을 활성화시키는 방법으로 게시글을 보호하고 게시글 작성은 그냥 로그인 화면 보이게끔 놔두면 될 거 같습니다.
'개발 공부하면서 오류 해결' 카테고리의 다른 글
소스트리 비밀번호 초기화시 유의점 (0) | 2023.09.25 |
---|---|
flutter 오류 [myapp] flutter create --template app --overwrite .Error: Unable to find git in your PATH. exit code 1 (0) | 2023.06.28 |
게시글 작성시 member_id null (0) | 2023.04.10 |
[THYMELEAF][http-nio-8080-exec-1] Exception processing template "detail": An error happened during template parsing (template: "class path resource ") 오류 해결 (0) | 2023.03.29 |
첫 배포 경험 (0) | 2023.03.19 |