Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JavaScript
- MySQL
- Linux
- 자바
- select문
- SQL
- 리눅스
- github
- 알고리즘
- 정보처리기사필기요약
- 프로그래머스 sql 고득점 kit
- StringBuilder
- 예외처리
- 개발자
- 정보처리기사
- where
- 데이터 조회
- 백준
- Git
- html
- 입출력
- 스프링
- sql문
- select
- 형변환
- BufferedReader
- 프로그래머스 SQL
- order by
- 백엔드
- 프론트엔드
- DML
- scanner
- 메서드
- 클래스
- String클래스
- 웹개발
- mybatis
- 프로그래밍
- 자바스크립트
- Java
Archives
- Today
- Total
ToBe끝판왕
[ 스프링 시큐리티 ] 스프링 시큐리티 View 렌더링 문제 본문
반응형
스프링 시큐리티 설정파일 View 렌더링 설정
• Spring Security 설정 파일
- 스프링 부트 3.x 이상 버전
- 스프링 시큐리티 5.7 이상 버전
- 기존 회원가입 페이지 url 허용함
• 회원가입 URL 입력시 문제 발생 ( 페이지 보이지 X )
- 현재 로그를 보면, Spring Security 가 /WEB-INF/views/member/joinForm.jsp 경로에 대해 인증이 필요하다고 판단함
- Security Filter 에 의해 권한이 없다고 결론내리고 /user/login 페이지로 리다이렉트 되고 있다.
• JSP 파일의 경로가 필터에 걸려 노출되지 않는 현상 발생
- forwards / includes 타입 요청을 필터에서 허용하도록 수정 필요
- .jsp 파일 경로 ( WEB-INF/view/* ) 허용하도록 수정 필요
package com.wsd.invest.security;
import jakarta.servlet.DispatcherType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.firewall.DefaultHttpFirewall;
import org.springframework.security.web.firewall.HttpFirewall;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
// 회원 정보 조회 Service 클래스 주입
private UserDetailService userDetailService;
private PasswordEncoder passwordEncoder;
@Autowired
public SecurityConfig(UserDetailService userDetailService, PasswordEncoder passwordEncoder) {
this.userDetailService = userDetailService;
this.passwordEncoder = passwordEncoder;
}
// AuthenticationManager 빈 등록
@Bean
public AuthenticationManager authenticationManager(
AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.httpFirewall(defaultHttpFirewall());
}
@Bean
public HttpFirewall defaultHttpFirewall() {
return new DefaultHttpFirewall();
}
// HTTP 요청에 따른 보안정책 정의 (스프링 시큐리티 버전 5.7 이상 버전 방식 )
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
// CSRF 비활성화 (필요시 활성화 가능)
.csrf(csrf -> csrf.disable())
// 권한에 따른 HTTP url 설정
.authorizeHttpRequests(auth -> auth
// 메인 / 로그인 / 회원가입 / .jsp 파일 경로 접근 허용
.requestMatchers("/user/main", "/user/login", "/user/join", "/WEB-INF/views/**").permitAll()
// 정적 리소스 허용
.requestMatchers("/css/**", "/js/**", "/images/**").permitAll()
// forward / include 타입 요청 허용
.dispatcherTypeMatchers(DispatcherType.FORWARD).permitAll()
.dispatcherTypeMatchers(DispatcherType.INCLUDE).permitAll()
// 나머지 요청 인증 필요
.anyRequest().authenticated()
)
// 로그인 설정
.formLogin(form -> form
// Get 요청 로그인 페이지
.loginPage("/user/login")
// Post 요청 로그인 처리 Url
.loginProcessingUrl("/user/login")
// 로그인 성공 url
.defaultSuccessUrl("/user/main", true)
// 로그인 실패 url
.failureUrl("/user/login?error=true")
.permitAll()
)
// 로그아웃 설정
.logout(logout -> logout
// POST 요청 로그아웃 처리 Url
.logoutUrl("/user/logout")
// 로그아웃 성공 url
.logoutSuccessUrl("/user/login")
// 로그아웃 시 세션쿠키 삭제
.deleteCookies("JSESSIONID")
.permitAll()
)
.requestCache(requestCache -> requestCache.disable());
return http.build();
}
}
※ The Request was rejected because the URL contained a potentially malicious string "//" 발생
- URL 에 문자열 "//" 이 포함되어 요청이 거부되는 에러 발생
- Spring Security Config 에 밑에 내용을 추가한다.
- 더블 슬래시 허용 코드를 추가함으로써 해결
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.httpFirewall(defaultHttpFirewall());
}
@Bean
public HttpFirewall defaultHttpFirewall() {
return new DefaultHttpFirewall();
}
반응형
Comments