SecurityContextHolder에서 인증된 엔티티의 세부 정보를 저장하는 Authentication 객체를 얻고
관련 정보를 가져올 수 있음
디버깅 걸고 실제로 찍어보면 anonymous 로 찍힘
여기서 궁금한 부분이 진짜 스레드로컬 방식으로 돌아갈까?
SecurityContextholder 관련 질문이 있어 글을 적게 되었습니다.
SecurityContext는 ThreadLocal 기반이고, 이를 전역에서 사용할 수 있도록 Static 변수인 SecurityContextHolder에 저장된다고 이해를 했습니다. (강의 내용을 참고, 혹시.. SecurityContextHolder가 Static 변수가 아니라면 정정해주시면 감사하겠습니다!)
여기서 궁금한 부분은... 멀티 쓰레딩 환경입니다.
스프링 MVC는 결국 요청마다 쓰레드가 할당되는 쓰레딩풀 환경이라 멀티 쓰레드로 동작을 하고 있는 것으로 알고 있습니다.
그렇다면 동시에 사용자로부터 인증 요청이 온다면, 동시에 SecurityContextHolder에 SecurityContext가 각각 저장된다는 것인데.. 이런 환경에서 어떻게 동작하는지 잘 이해하기가 어렵습니다.
예를 들어 동시에 인증 요청이 오게 되면, SecurityContextHolder의 동시성 문제는 어떻게 처리되는 걸까요?
SecurityContextHolder 관련 질문이 있습니다! - 인프런 | 질문 & 답변
안녕하세요.항상 좋은 강의 감사드립니다!SecurityContextholder 관련 질문이 있어 글을 적게 되었습니다.SecurityContext는 ThreadLocal 기반이고, 이를 전역에서 사용할 수 있도록 Static 변수인 SecurityContextHol
www.inflearn.com
Thread.currentThread()
이걸로 찍으면 스레드 번호나옴.
3 -> 7 -> 5 -> 6 -> 7 -> 10
이런식으로 스레드풀이 돌아가면서 나오는 것을 확인.
나는 스레드로컬 방식에서 실제로 다른 스레드와의 공유가 되냐 안되냐 이것보다는
스레드 개수를 한번 제한하고 싶다는 호기심 생김.
스레드 1개주고 테스트 해봄.
server.tomcat.threads.max = 1
그리고 실제로 스레드 찍어보면 1만 나옴.
그렇다면 보안컨텍스트를 왜 공유하는걸까?
그 이유로 책에서는 비동기 상황에 대해 나온다.
비동기는 아래 참조
https://steady-coding.tistory.com/611
[Spring] @Async 사용 방법
spring-study에서 스터디를 진행하고 있습니다. Java 비동기 처리 Spring @Async를 살펴 보기 전에 동기, 비동기, 멀티 스레드의 개념은 필수적이다. 해당 개념을 알고 있다고 가정하고, 순수 Java 비동기
steady-coding.tistory.com
async일때 문제라고 나오는데 asnyc 어노테이션을 쓴게 내가 하고 있는 프로젝트에는 없음....
그리고 찾아보면 대부분 어떻게 쓰고 동작방식이 어떻게 되는가에 대한 설명뿐
왜 쓰는가에 대한 설명이 없음.
아마 이런식으로 대용량 처리하는데 쓰이지 않을까 생각.
https://honinbo-world.tistory.com/97
Spring WebFlux를 이용한 100만건 엑셀 파일 처리 테스트
그마저도 외부 라이브러리를 사용.
결론 : 직접적으로 쓰레드관리하는 패키지를 만들지 않는 이상 사용할 일 없음.
httpbasic
참고로 책에서 나오는
extends WebSecurityConfigurerAdapter
통해서 httpsbasic 구현하는 방법은 스프링부트 3.0에서는 deprecated됨.
아래는 기본 httpbasic configure 코드
package org.example.config;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
public class ProjectConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception{
http.httpBasic();
}
}
authentificationentrypoint 인터페이스는 처음들어봄.
보통 아래와 같이 커스텀 가능.
참고로 config 2개파일 만들면
아래와 같이 에러나옴.
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.IllegalStateException: Found WebSecurityConfigurerAdapter as well as SecurityFilterChain. Please select just one.
로그인 인증 방식으로
@Override
protected void configure(HttpSecurity http) throws Exception{
//http.httpBasic();
http.formLogin();
http.authorizeRequests().anyRequest().authenticated();
}
스프링에서 제공하는 기본 로그인화면
'IT' 카테고리의 다른 글
Unused Docker containers stuck in Removal in Progress state. Device or Resource Busy 도커 내리면 자꾸 removal 상태로 빠지는 이유 (0) | 2023.07.11 |
---|---|
백준 핸드폰 번호 궁합 파이썬 (0) | 2023.07.10 |
java null error .toString() (0) | 2023.06.29 |
파이썬 2824 백준 (0) | 2023.06.27 |
스프링시큐리티인액션 5장 인증-1 (0) | 2023.06.26 |