Spring_SpringBoot (42) 썸네일형 리스트형 [ URI 요청(GET) ] SpringSecurity관련해서 url요청으로 테스트하고 있는데 URI요청에 대해서 정리해야겠다. 문제점 : Spring Security 통해서 /savemoney/mypage에 로그인 할 때 필터링을 걸었다. 그런데 로그인이 되지 않았는데도 SpringSecurity가 실행이 되지 않고 해당 페이지가 보였다. 결국 문제는 브라우저의 캐시 때문이다... 아무리 내가 savemoney/mypage를 해도 브라우저 자체 캐시로 그 전에 입력했던 saveMoney/mypage로 치환해서 요청을 한 것이다. 그럼 front단인 node.js는 "saveMoney/mypage" 로 요청을 받고 Apache는 .. [ 세션 클러스터링(Session Clustering) ] 세션 클러스터링은 WAS가 두 대 이상 설치되어 있을을 경우 동일한 세션으로 세션관리를 하는 것을 의미한다.동일한 세션으로 여러 곳에서 사용할 수 있게 관리하는 것. 동시 접속자가 많은 경우 하나의 WAS만으로는 모든 처리가 불가능하기 때문에 WAS를 묶어 분산처리 한다.이 때 WAS는 한 곳에 세션을 몰아주거나 세션 서버를 따로 두어 관리하게 된다. 방식1. WAS가 두 대 이상일 때동시 접속자가 많은 경우 하나의 WAS만으로는 모든 처리가 불가능하기 때문에 WAS를 묶어분산처리 한다. 이 때 WAS는 한 곳에 세션을 몰아주거나 세션 서버를 따로 두어 관리하게 된다. 2. 서버 단계에서 볼 때 아파치 서버를 두고 톰캣 서버를 연통시켜서 사용하는 방법이다. 아파치를 통해 세션을 공유한다. 2-1) Hor.. @Autowired, @Inject, @Resource Spring을 쓰면서 Autowired를 썼는데 가끔 Inject, Resource가 있다. 차이점을 알아보자. 1) @AutowiredSpring에서 지원하는 어노테이션이다. 의존성을 주입하는 순서가 타입 → 이름 → @Qualifier → 실패 순서다. 2) @ResourceJava에서 지원하는 어노테이션이다. 특정 프레임 워크에 종속적이지 않다. 의존성을 주입하는 순서가 이름 → 타입 → @Qualifier → 실패 순서다. 3) @InjectJava에서 지원하는 어노테이션이다. 특정 프레임 워크에 종속적이지 않다.타입 → @Qualifier → 이름 → 실패이다. [ AccessDeniedHandler ] VS [ AuthenticationEntryPoint ] Spring Security SpringSecurity 개발하면서 두 개의 차이점을 알아봐야겠다. 1) AccessDeniedHandler 사용자가 인증되었지만 권한이 부족할 때 호출된다. 예를 들면 다음과 같다.어떤 사용자가 자격 정지를 당했다. 그러면 DB에 있는 아이디 컬럼과 비밀번호 컬럼이 있어서 인증은 됐다.그러나 자격 컬럼에서 자격 정지를 당했다. 그러면 보통 403에러를 내면서 접근 금지 Response를 리턴한다. 2) AuthenticationEntryPoint인증이 되지 않았을 때 호출된다. 예를 들면 다음과 같다.myPage를 들어가기 위해서는 로그인이 되어 있어야 한다. 그러나 로그인을 안 한 사용자가 접속한다고 하면당연히 막아주어야 한다. 그러면 보통 401에러를 내면서 접근 권한 없음 Response를 리턴.. 빈 순환참조, 필드 주입, 생성자 주입 Spring Security도 DeadLock처럼 순환 참조가 생긴다. 알아보자. 1) 순환참조우선 처음 나의 문제는 순환참조 문제였다.3번 사진의 경우는 문제가 안 됐지만 순환참조가 일어났던 곳은 첫 번째 사진과 두 번째 사진이었다. ②번이 ⑤번에 의존성을 주입해서 사용하고 있고④번이 첫번 째 사진의 CustomAuthenticationProvider에 의존성 주입을 해 사용하고 있다.→ 결과적으로 서로 참조하는 관계가 생기므로 에러가 나는 것이다. 2) 생성자 주입그 후 순환참조 문제로 인해서 ②번의 @Autowired를 뺀 "private passwordEncoder passwordEncoder"을 생성했다.코드 상에서의 문제는 없지만 NullPointerException이 떨어졌는데 그것은 바로 .. 애노테이션(Annotation) - Component, Bean 애노테이션(annotation)은 사전적 의미로는 주석을 의미한다. 일반적인 주석과 다르게 애노테이션은 코드를 작성할 수 있다. 즉, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애노테이션이다. 애노테이션은 주석이기 때문에 다이나믹하게 실행되는 코드는 들어가지 않는다.즉, 런타임 중에 알아내야하는 값은 못들어간다.→ Annotation을 통해 @Autowired를 통해서 의존성을 찾지 못한다는 에러를 많이 봤을 것이다. 런타임 도중에 해석할 수 없으므로 코드가 실행되기 전에 에러를 내버리는 것이다. Annotation은 의미가 있는 것도 없는 것도 있다.예를 들어 Overriding같은 경우는 특별한 기능은 없다. 그러나 개발자의 편의상 제공하는 어노테이.. Spring-Security 프로젝트 중 Spring - Security 개발을 했다. 심도있게 알아보고 적용하자. 1 ) Spring SecuritySpring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다.→ ex) 로그인을 하지 않았는데 mypage 페이지의 문제가 생기는 경우 2 ) Spring Security Architecture 3 ) 인증(Authorization)과 인가(Aut.. JWT(JSON Web Token) JWT생성하면서 작성한 코드를 정리해야겠다. 1) JWT 생성 우선 getToken을 이용해서 Token발급 관련 메소드이다.1) key와 value 매개변수를 넘겨서 token을 발급을 시작한다.2) expTime을 통해서 30분(1000*60*30) 시간 제한을 둔다.3) secretKey를 통해서 Base64로 디코딩하여 바이트 배열로 변환한다. ※ secretKey는 임의로 지정했다.4) HMAC-SHA256키로 서명 키를 생성한다.5) JWT의 경우 header 부분에 데이터type과 암호화 알고리즘이 있어야 한다. 그러므로 headerMap에 넣었다.6) payload 부분 key값과 value를 넣는다. 참고로 payload부분은 노출되므로 절대로 중요한 정보를 넣으면 안된다.7.. 이전 1 2 3 4 5 6 다음