250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring
- oracle
- Tomcat
- Open Source
- 설정
- MSSQL
- ubuntu
- IntelliJ
- 문서
- maven
- Python
- error
- JDBC
- JavaScript
- Spring Boot
- Exception
- Thymeleaf
- myBatis
- STS
- git
- SpringBoot
- Docker
- MySQL
- Core Java
- jpa
- 오픈소스
- Source
- Eclipse
- PostgreSQL
- AJAX
Archives
- Today
- Total
헤르메스 LIFE
[Spring Boot] Spring Security 에서 antMatchers 를 Array 로 처리 본문
Spring Boot Framework
[Spring Boot] Spring Security 에서 antMatchers 를 Array 로 처리
헤르메스의날개 2022. 3. 9. 02:11728x90
개발환경
https://hermeslog.tistory.com/585
antMatchers에서 문자열 "/login.do", "/logout.do", "/swagger-ui/**", "/swagger-ui" 등의 목록이 하드코딩되어 있어서 한 곳으로 모았으면 해서 알아 봤습니다.
SecurityConfig.java
package com.study.springboot.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import com.study.springboot.config.auth.CustomAuthenticationSuccessHandler;
@Configuration
@EnableWebSecurity // 스프링 Security Filter가 Spring Fileter Chain에 등록된다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
@Bean
public BCryptPasswordEncoder encodePwd() {
return new BCryptPasswordEncoder();
}
/**
* <pre>
* Security 무시 설정
* excludePathPatterns 설정이 변경되면, WebMvcConfig Class도 변경되어야 한다.
* </pre>
*/
@Override
public void configure( WebSecurity web ) {
web.ignoring().antMatchers("/css/**", "/fonts/**", "/images/**", "/js/**", "/modules/**")
.antMatchers("/h2-console/**", "/swagger-ui/**");
}
@Override
protected void configure( HttpSecurity http ) throws Exception {
// 해당 기능을 사용하기 위해서는 프론트단에서 csrf토큰값 보내줘야함
// <input type="hidden" name="${_csrf.paremeterName }" value="${_csrf.token }"/>
http.csrf().disable(); // Spring Security의 SCRF를 막음. Post가 안될 경우가 존재하면 막는 경우도 있음.
http.authorizeHttpRequests() //
.antMatchers("/login.do", "/logout.do", "/swagger-ui/**", "/swagger-ui").permitAll() // 로그인 하지 않고 모두 권한을
// 가짐.
.anyRequest().authenticated() // 그 외 모든 요청은 인증된 사용자만 접근 가능
// .anyRequest().permitAll() // 로그인 하지 않고 모두 권한을 가짐.
;
http.requiresChannel()
// .antMatchers("/**").requiresSecure() // https 로 리다이렉스 시킴
.antMatchers("/**").requiresInsecure() // http 로 리다이렉스 시킴
;
http.formLogin() // 로그인 페이지와 기타 로그인 처리 및 성공 실패 처리를 사용하겠다는 의미 입니다.
.loginPage("/login.do") // Login 화면
.loginProcessingUrl("/loginProcess.do") // Login 프로세스
// .defaultSuccessUrl("/main.do", true)
.successHandler(new CustomAuthenticationSuccessHandler("/main.do")) // 인증에 성공하면 Main 페이지로 Redirect
// // .failureHandler(new CustomAuthenticationFailureHandler("/login-fail")) // 커스텀 핸들러를 생성하여 등록하면 인증실패
// 후
.failureUrl("/login.do?fail=true") // 인증이 실패 했을 경우 이동하는 페이지를 설정합니다.
.usernameParameter("userId") // Login ID 명칭지정 - MemberRepository 의 id와 매칭됨.
.passwordParameter("password") // Login PW 명칭지정
;
http.logout() //
.logoutRequestMatcher(new AntPathRequestMatcher("/logout.do")) // 로그아웃
.logoutSuccessUrl("/login.do") // 로그아웃에 성공하면 페이지 Redirect
.invalidateHttpSession(true) // Session 초기화
;
}
}
Constants.java
package com.study.springboot.config;
public final class Constants {
/**
* Resource 대상
* @see SecurityConfig
*/
public static final String[] resourceArray = new String[] { "/css/**", "/fonts/**", "/images/**", "/js/**",
"/modules/**", "/h2-console/**", "/swagger-ui/**" };
/**
* 권한제외 대상
* @see SecurityConfig
*/
public static final String[] permitAllArray = new String[] { "/login.do", "/logout.do", "/swagger-ui/**",
"/swagger-ui" };
/**
* 인터셉터 제외 대상
* @see WebMvcConfig
*/
public static final String[] interceptorArray = new String[] { "/css/**", "/fonts/**", "/images/**", "/js/**",
"/modules/**", "/login.do", "/logout.do", "/upload.do" };
}
SecurityConfig.java 에서 하드코딩되어 있던 URL이 Constants.java 로 옮겨서 좀 변경하기 쉬워지지 않았나 싶습니다.
package com.study.springboot.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import com.study.springboot.config.auth.CustomAuthenticationSuccessHandler;
@Configuration
@EnableWebSecurity // 스프링 Security Filter가 Spring Fileter Chain에 등록된다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
@Bean
public BCryptPasswordEncoder encodePwd() {
return new BCryptPasswordEncoder();
}
/**
* <pre>
* Security 무시 설정
* excludePathPatterns 설정이 변경되면, WebMvcConfig Class도 변경되어야 한다.
* </pre>
*/
@Override
public void configure( WebSecurity web ) {
web.ignoring().antMatchers(Constants.resourceArray);
}
@Override
protected void configure( HttpSecurity http ) throws Exception {
// 해당 기능을 사용하기 위해서는 프론트단에서 csrf토큰값 보내줘야함
// <input type="hidden" name="${_csrf.paremeterName }" value="${_csrf.token }"/>
http.csrf().disable(); // Spring Security의 SCRF를 막음. Post가 안될 경우가 존재하면 막는 경우도 있음.
http.authorizeHttpRequests() //
.antMatchers(Constants.permitAllArray).permitAll() // 로그인 하지 않고 모두 권한을 가짐.
.anyRequest().authenticated() // 그 외 모든 요청은 인증된 사용자만 접근 가능
// .anyRequest().permitAll() // 로그인 하지 않고 모두 권한을 가짐.
;
http.requiresChannel()
// .antMatchers("/**").requiresSecure() // https 로 리다이렉스 시킴
.antMatchers("/**").requiresInsecure() // http 로 리다이렉스 시킴
;
http.formLogin() // 로그인 페이지와 기타 로그인 처리 및 성공 실패 처리를 사용하겠다는 의미 입니다.
.loginPage("/login.do") // Login 화면
.loginProcessingUrl("/loginProcess.do") // Login 프로세스
// .defaultSuccessUrl("/main.do", true)
.successHandler(new CustomAuthenticationSuccessHandler("/main.do")) // 인증에 성공하면 Main 페이지로 Redirect
// // .failureHandler(new CustomAuthenticationFailureHandler("/login-fail")) // 커스텀 핸들러를 생성하여 등록하면 인증실패
// 후
.failureUrl("/login.do?fail=true") // 인증이 실패 했을 경우 이동하는 페이지를 설정합니다.
.usernameParameter("userId") // Login ID 명칭지정 - MemberRepository 의 id와 매칭됨.
.passwordParameter("password") // Login PW 명칭지정
;
http.logout() //
.logoutRequestMatcher(new AntPathRequestMatcher("/logout.do")) // 로그아웃
.logoutSuccessUrl("/login.do") // 로그아웃에 성공하면 페이지 Redirect
.invalidateHttpSession(true) // Session 초기화
.deleteCookies("JSESSIONID");
}
}
728x90
'Spring Boot Framework' 카테고리의 다른 글
[Spring Boot] Spring Boot + Thymeleaf + Thymeleaf Layout Dialect (0) | 2022.03.10 |
---|---|
[Spring Boot] Spring Boot + Thymeleaf (0) | 2022.03.09 |
[Spring Boot] Spring Security #02 (0) | 2022.03.02 |
[Spring Boot] Spring Security #01 (0) | 2022.03.01 |
[Spring Boot] 정적 페이지 로딩 (0) | 2022.02.27 |