전체 글

스프링시큐리티

[스프링시큐리티 맨땅부터 적용하기] 2. securityConfig 설정

JAVA 17 / SpringBoot 3.21 / SpringSecurity 6.21 / API형태로 개발하였습니다. 스프링 시큐리티가 어플리케이션에 적용되었으니 우리 입맛에 맞게 설정을 변경해줘야 합니다. 1. SecurityConfig 생성 - 프로젝트 경로에 config 패키지를 하나 만들고 SecurityConfig클래스를 생성했습니다. 2. SecurityConfig 기본 설정 - 시큐리티 설정 파일입니다. 가장 먼저 0@EnableWebSecurity 어노테이션을 달아줍니다. 이렇게 하면 어플리케이션에 요청되는 모든 URL이 스프링 시큐리티의 필터 체인을 거치게 됩니다. @Configuration //컴포넌트 스캔에 적용되도록 어노테이션을 달아줍니다. @EnableWebSecurity //모든..

스프링시큐리티

[스프링시큐리티 맨땅부터 적용하기] 1. 프로젝트 생성 및 gradle 설정

스프링부트 3.21 자바 17 기준입니다. API형태로 개발하였습니다. 1. 스프링 이니셜라이즈 설정 디펜던시는 스프링 웹만 추가하였습니다. 나머지 필요한 디펜던시는 직접 추가 2. index.html 추가 resources/static 경로에 index.html 파일 추가, 어플리케이션을 실행하여 index.html이 정상적으로 출력되는지 확인합니다. 3. SpringSecurity 추가 build.gradle에 SpringSecurity 의존성을 추가해줍니다. 스프링 시큐리티 버전은 별도로 설정하지 않았습니다. (스프링 부트 버전에 맞는 버전 and 저장소에 등록된 최신 버전으로 자동으로 설정) (현재 프로젝트에는 스프링 시큐리티 6.21이 자동으로 적용되었습니다) plugins { id 'java'..

스프링시큐리티

[스프링시큐리티] 커스텀 Login 화면과 csrf

스프링 시큐리티에서는 기본적으로 Login 화면을 제공한다. 이 로그인 화면을 커스텀 하기 위해서는 1. 스프링 시큐리티 Config 설정 -> Bean으로 등록했던 스프링 시큐리티 설정값에서 로그인 페이지와 처리 url을 표기해준다 @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { //인증 방식 http .formLogin() //폼 로그인 방식 .loginPage("/login") // 사용자 정의 로그인 페이지 .loginProcessingUrl("/loginProc") // 로그인 프로세스 url .defaultSuccessUrl("/", false) // 로그인 성공 후 원래 페이지로 리다이렉트 ...

스프링시큐리티

[스프링시큐리티] 권한(Authority) & 역할(Role)에 따른 페이지 인가

스프링 시큐리티에서 요청에 대한(http) 접근을 허용할 때 HttpSecurity.hasAuthority("권한명") HttpSecurity.requestMatchers("/user/**").hasRole("ROLE+권한명") 으로 처리한다. 권한과 역할을 내부적으로 나눈것 같은데 스프링 시큐리티가 내부적으로 체크하는 값은 동일하다. ( UserDetails인터페이스의 private final Set authorities; Collection

스프링시큐리티

[스프링 시큐리티] 스프링시큐리티 -2(로그인 로직 처리)

해당 포스팅은 스프링 시큐리티 6.0.3을 기준으로 합니다. ------------------------------------------------------------------------------------------------------- 스프링 시큐리티 하위버전의 경우 WebMvcSecurityConfiguration을 extends을 상속받아 @Override protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception{ authenticationManagerBuilder.userDetailsService(LoginService); } configure 메소드를 오버라이드 하..

스프링시큐리티

[스프링 시큐리티] 스프링시큐리티 -1(시큐리티 인가 및 인증)

해당 포스팅은 스프링 시큐리티 6.0.3을 기준으로 합니다. ------------------------------------------------------------------------------------------------------- 1.시큐리티 인가 및 인증 관련 설정하기 -> HttpSecurity객체를 변수로 받고, SecurityFilterChain을 반환하는 메소드를 Bean으로 등록 ->변수로 받은 HttpSecurity 객체를 통해 인가 페이지 및 인증 방식을 설정 /*시큐리티 인가 및 인증*/ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { //인가 /*http.csrf().di..

스프링시큐리티

[스프링 시큐리티] 0.스프링시큐리티 설치 및 설정

해당 포스팅은 스프링 시큐리티 6.0.3을 기준으로 합니다. ------------------------------------------------------------------------------------------------------- 인프런에서 스프링 시큐리티 강의를 듣는데, 강의에서 시연하는 버전은 옛버전이라 디프리케이티드된 메소드나, 전체적으로 다른 구현방식이 많다. (+ 시큐리티 강의 자체가 거의 없음 ㅠㅠ) 스프링 시큐리티 하위버전의 경우 WebMvcSecurityConfiguration을 extends받아 configure을 오버라이드해 여러가지 설정을 구현하였는데, 시큐리티 3.x버전부터 많은 변화가 생겨서 WebSecurityConfigurerAdapter가 디프리케이티드 되고,..

기타

SpringSecurity 6.0이상에서 정적 자원 폴더 (resources/static) 보안필터 미적용(무시)하게 하기.

@Bean public WebSecurityCustomizer webSecurityCustomizer() { // return (web) -> { // web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); // web.ignoring().antMatchers("/favicon.ico", "/resources/**", "/error"); // }; /*requestMatchers().permitAll()과 달리 보안필터 자체를 거치지 않는다.*/ return (web) -> web.ignoring() .requestMatchers("/css/**") .requestMatchers("/font/**") .req..

여웅사랑
컴터하는여웅이