DelegatingFilterProxy Servlet Filter는 스프링에서 정의된 빈을 주입해서 사용할 수가 없음. 서버 구동시에 Spring Security가 자동으로 보안을 잡아주는데 구동시에 DelegatingFilerProxy가 생성됨. DelegatingFilerProxy는 특정한 이름을 가진 스프링 빈을 찾아 그 븐에게 요청을 위임. springSecurityFilterChain 이라는 이름으로 생성된 빈을 ApplicationContext 에서 찾아 요청을 위임함. DelegatingFilerProxy가 보안처리를 하는 것이 아님. FilterChainProxy springSecurityFilterChain 의 이름으로 생성되는 빈 DelegatingFilerProxy 로부터 요청을 위임..
CSRF란? 공격자가 이미 한 웹사이트의 쿠키를 발급 받은 사용자에게 가짜 웹사이트를 보내서 이미지를 클릭하게 만들 경우, 공격자가 웹 사이트에 사용자라고 인식 하게 만들어 보안을 해지시키는 방법을 말함. Spring CSRF 사용자가 접속 시 인증이된 경로로 들어오는 것인지 확인하여 보안에 대한 문제점을 해결한 방식임. 사용자가 로그인시 랜덤으로 생성되는 CSRF 토큰을 발행하고 그 값을 사용자가 가짐 사용자가 재 접속시 가지고 있던 CSRF 토큰을 서버에 건내고 서버는 그 값이 자신이 발급한 토큰이 맞는지 확인함. Client 쪽 form에 저장되는 코드 Spring Security 보안 설정 방법 http.csrf() : 기본 활성화되어 있음 http.csrf().disabled() : 비활성화
ExceptionTranslationFilter FilterSecurityIntercepterFilter 직전에 수행되는 필터가 ExceptionTranslationFilter 이다. AuthenticationException 인증 예외처리가 일어나면 AuthenticationEntryPoint 호출하고 >> 로그인 페이지로 이동 >> 401 오류 코드를 전달함. 인증 예외가 발생하기 전 사용자가 보낸 요청정보를 저장 RequestCashe - 사용자가 이전에 보낸 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘 SaveRequest - 사용자가 요청했던 request 파라미터 값들, 그 당시의 헤더 값들 등이 저장됨. AccessDeniedException 사용자가 어떠한 자원에 접근하려고 ..
인가 API - 권한 설정 선언적 방식 URL http.antMatchers("/users/**")/hasRole("USER") Method @PreAuthorize("hasRole("USER")") public void user() {System.out.println("user")} 동적 방식 - DB 연동 프로그래밍 URL Method 선언적 방식 - URL url 자체를 선언하여 접근 권한을 조정하는 방식 설정 시 구체적인 경로가 먼저오고 그것 보다 큰범위의 경로가 뒤에 오도록 하여야 한다. 각 메소드에 대한 내용은 아래 같다. .authorizeRequests() : 모든 경로에 보 요청되는 메소드를 선언 .antMatchers("/","/users","user/login/**", "/login*..
어노테이션 이전의 방식 현재 많이 사용되는 어노테이션의 등장되기 전 어떠한 코드로 IoC를 관리 해왔는지 어느정도 알아보면 어노테이션을 이용한 방식이 편한지 알 수 있다. 이전의 방식은 .xml파일에 직접적으로 빈의 정보를 입력 하여야 한다. Maven 프로젝트의 경우 그러한 Bean 관리를 root-context.xml에서 관리 하고 있다. 위와 같은 의존성을 가지려고 하면 xml에는 아래와 같이 Bean을 추가하여야 한다. 그렇다면 B2의 클래스를 B3로 변경하려면 한다면 xml에서 코드를 아래와 같이 변경해야 할 것이다. 어노테이션의 사용 최초의 Spring의 등장시에는 저러한 방식도 매우 편리한 방식의 코드 였다. 하지만 사람이라는 것은 더 편한 것을 찾기 마련이었고 그 방안으로 어노테이션을 이용..
바꿔 볼 Java code .xml 은 하나의 IoC 컨테이너로 bean들을 해당 파일 안에 선언해두면 우리가 원하는 대로 선택해서 사용 할 수 있게된다. 그렇다면 이러한 bean은 어떻게 만들어지는지 확인해보자. 먼저 바꿔볼 자바 코드는 아래와 같다. Exam exam = new NewlecExam(); ExamConsole console = new GridExamConsole(); console.setExam(exam); console.print(); 우리가 필요한 기능 들은 NewlecExam클래스에 있고 그것을 인터페이스인 exam 타입으로 객체를 만들어 두었다. 그리고 원하는 모양의 콘솔을 console로 선언 해두었고, 원하는 값을 받아서 출력하는 코드가 바로 위의 코드이다. .xml 로 객체..