inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

API Gateway - Route 처리

spring-boot 2.7 이상을 사용 하시는 분의 경우

2513

최재영
1

안녕하세요. 강사님께서는 2.6 버전을 사용 권장 하셨지만 왠지 모를 궁금함에

2.7에서 사용하는 spring security 5.7 이상에서 바뀐 부분으로 한번 적용을 해보고 싶었습니다.

인프런에 올라온 많은 분들의 질문을 정리 하여

만들어 보았습니다.

 

package com.example.userservice.security;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

import com.example.userservice.service.UserService;

import lombok.RequiredArgsConstructor;

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurity {

	private final UserService userService;	
	private final BCryptPasswordEncoder bCryptPasswordEncoder;
	private final Environment env;

	AuthenticationManager authenticationManager;
	
	// spring.boot 2.7 부터는 WebSecurityConfigurerAdapter가 아닌
	// SecurityFilterChain 을 사용 합니다.
	@Bean
	public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
		
		AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class);
        authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder);
        authenticationManager = authenticationManagerBuilder.build();
        
        //AuthenticationFilter authenticationFilter = new AuthenticationFilter();
		//authenticationFilter.setAuthenticationManager(authenticationManager);
        
        AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager , userService , env);
        
		http.csrf().disable();
		
		http.authorizeRequests()
		//.antMatchers("/error/**").permitAll() // public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr() is not supported 보기 싫을때 활성화
		.antMatchers("/**")
		.hasIpAddress("127.0.0.1")
		.and()
		.authenticationManager(authenticationManager)
		.addFilter(authenticationFilter)
		;
		http.headers().frameOptions().disable();
		
		return http.build();
	}
	
	//ex) 기존의 경우 AuthenticationManagerBuilder 를 오버라이드 하여 사용 하였지만 filterChain 안에서 호출 하여 설정 합니다.
	/* 
	protected void configure(AuthenticationManagerBuilder auth) throws Exception{
		auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder);
	}
	*/
	
	
	//ex)filter를 authenticationAmanger에 주입 하던 getAuthenticationFilter역시 filterChain 내부에서 사용 합니다.
	/*
	private AuthenticationFilter getAuthenticationFilter() throws Exception {
		AuthenticationFilter authenticationFilter = new AuthenticationFilter();
		authenticationFilter.setAuthenticationManager(authenticationManager);
		return authenticationFilter;
	}
	*/

	

}

spring-boot jpa 아키텍처 spring-cloud kafka msa

답변 0

안녕하세요! 실무와 관련되서 질문드립니다!

0

330

1

진로 방향 질문드립니다...

0

380

1

스프링 백엔드 개발 로드맵

0

442

1

Spring 공부 어떤 강의 순서로 듣는게 좋은가요?

0

595

1

부트스트랩 유료화

1

422

2

학습 방향에 고민이 있습니다.

0

495

1

스프링 선수학습이 필요한가요?

1

509

1

강의 구매에 관한 질문입니다.

0

424

1

spring db기술 강의

0

458

1

학습 코스 질문입니다.

0

474

1

프로젝트를 진행할려면 어느정도로 학습을 해야할까요?

0

464

1

개발을 업으로 삼기 위한 진지한 고민과 포트폴리오 방향에 대한 질문

1

645

1