본문 바로가기

SpringSecurity

(37)
SpringSecurity(Ajax AuthenticationFilter) AbstractAuthenticationProcessingFilter를 상속받아서 필터를 구성하고자 한다 UsernamePasswordAuthenticationFilter도 이 추상클래스를 상속받아서 구성되어 있다. 대부분 인증 처리 기능을 이 추상클래스가 하고 잇다 . 필터 작동조건 AntPathRequestMatcher("/api/login") 로 요청정보와 매칭하고 요청 방식이 Ajax 이면 필터 작동 AjaxAuthenticationToken 생성하여 AuthenticationManager 에게 전달하여 인증처리 Filter 추가 http.addFilterBefore(AjaxAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) f..
SpringSecurity(AccessDenied) 인증거부처리 인증은 성공했으나 서버자원에 접근하려 했을때 사용자의 권한이 서버자원에 접근가능한 권한이랑 일치하지 않을때 인가예외가 발생하게되는데 인가예외는 인증필터가 처리 하는게 아니고 FilterSecurityInterceptor 에서 인가 예외를 처리한다. 인가예외가 발생하게 되면 이필터가 AccessDeniedException에서 예외를 받아서 다시 예외를 throw 하게 되는데 이 예외를 어디서 받냐면 AccessDeniedException을 받아서 accessDeniedHandler를 호출한이후에 예외를 처리 하게되어 있다 중요한건 인증시도중에 발생하는 인증예외는 인증예외처리하는 필터가 받아서 처리를 하고 인가예외는 인가예외를 처리하는 필터에서 받아서 처리한다 생각해보면 그래서 인증에 성공하고나서 인증객체를..
SpringSecurity(인증실패핸들러) SpringSecurity 에서 기본적으로 제공하는 AuthenticationFaulureHandler 인터페이스를 구현 해도 된다 필자는 SpringSecurity 에서 제공하는 SimpleUrlAuthenticationFailureHandler 를 상속받아서 처리해보고자 한다. #onAuthenticationFailure 메소드를 @Override를 한다 파라미터 값들을 보면 AuthenticationException 인증예외를 전달하고 있다. 여기 인증예외는 인증을 검증할때 인증에 실패하게되면 예외를 발생하게되는데 일반적으로 Provier UserDetails 에서 사용자의 아이디가 없거나 패스워드 검증이 실패하면 인증필터가 받아서 Failur 핸들러를 호출해서 실패처리를 하게된다. public v..
SpringSecurity(인증 성공 핸들러) Form 로그인 인증필터가 인증성공후에 핸들러를 호출해서 후속작업들을 처리 하는 과정을 하고자 한다 AuthenticationSuccessHandler 인터페이스를 구현해서 클래스를 만들수가 있고 SpringSecurity에서 이미 만들어진 구현체가 있는데 그 구현체를 상속해서 AuthenticationSuccessHandler타입의 클래스를 만들어서 인증 AP에 설정할수 있다. SpringSecurity 에서 만들어진 구현체를 상속받아서 진행 하겠다. 기본 구현체중에서 SimpleAuthenticationSuccessHandler를 상속해서 호출할수 있도록 구현해보겠다. onAuthenticationSuccess @Override를 해서 여러가지 후속 작업들을 처리 할수 있다. 파라미터로 request..
SpringSecurity(Authentication) 인증 부가기능 사용자가 인증을 요청을 하게되면 AuthenticationFilter 가 인증을 받아서 요청을 처리하게된다 . 이때 사용자가 기본적으로 ID와 Password를 입력 한다 하지만 현재 위엑 그림 상으로는 추가적으로 정보를 전달하고자 파라미터로 전달하는경우다. 추가적으로 전달된 이정보들을 저장해서 인증과정속에서 활용하거나 인증이후에도 이정보들을 참조해서 사용자가 서버자원에 접근 할수 있도록 한다 WebAuthenticationDetails 이 그역할을 하고 WebAuthenticationDetails를 생성하는 클래스가 AuthenticationDetailsSource이다 앞에사도 계속 언급했듯이 사용자가 이증을 요청하게 되면 Authentication(인증객체) 를 생성한다 여기에는 ID 와 Passwo..
SpringSecurity(로그아웃 및 인증에 따른 화면 보안처리) 로그아웃을 처리 해보자 로그인과 별다른건 없다 보안을 위헤서 몇가지 추가 해주면된다. 로그인 컨트롤러 가보자 로그아웃을 가능하게 하려면 현재 로그인되어 있는 유저 객체를 가지고와서 SecurirtContextHolder에 있는 인증객체를 null로 바꾸면 되면된다. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 현재 로그인 되어 있는 유저 객체를 가지고 온다 if ( authentication != null ){ new SecurityContextLogoutHandler().logout(request,response,authentication); } 인증객체가 널이 아니라면 로그아웃 핸들러를 호..
SpringSecurity( 커스텀 로그인 페이지 생성하기) 저번 포스팅까지는 스프링시큐리티 기본 페이지를 사용했다 이번에는 로그인 페이지를 따로 생성해서 설정해보자 일단 디렉토리를 로그인 폴더 안에 포그인 html을 넣었다 로그인 페이지는 단순하다 뭐가 없다.. 중요한건 form th:action 인데 지금 login_proc 로 설정되어 있다. Configu클래스로 가서 매핑을 요녀석 으로 맞춰줄꺼니까 기억하자 컨트롤 패키지에 로그인 컨트롤 패키지를하나 만들고 클레스를 생성해줬다 . 보면 return "user/login/login" 디렉토리 경로가 지금 user 파일 안에 login 파일 안에 loign.html이 있기 때문이다 간단한 경로지만 경로때문에 시간을 허비하지 말자 SecurityConfigu클래스로 왔다 loginPage "/login" 로그인 ..
SpringSecurityAuthenticationProvider(DB 연동 인증 처리2) 진행하기전에 저번 포스팅에서 DB연결 과정을 한번 보고 가자 현재 클래스에서 DB 에서부터 현재 인증을 시도 하고 있는 사용자의 계정이 존재하는지 username 을 통해서 확인하고 확인되면 Account 객체를 얻을수 있다. (만약에 널이면 UsernameNotFoundException 으로 예외 처리되고 최종적으로 UserDeatails 타입으로 반환된다 .) AccountContext 클래스를 통해서 Account 와 권한정보를전달해주는데 이 객체는 User클래스를 상속받는다 그리고 User는 UserDetails인터페이스를 구현하고 있다. 그리고 마지막엔 AccountContext가 리턴을 하게 된다. 여기 까지가 저번 포스팅 내용이다. 오늘은 반환된 반환되는 객체를 받아서 추가적인 검증을 진행하..