분류 전체보기 1341

ch01. 스프링 시큐리티 인가 개요

DB와 연동하여 자원 및 권한을 설정하고 제어함으로 동적 권한 관리가 가능하도록 한다 설정 클래스 소스에서 권한 관련 코드 모두 제거 ex) antMatcher(“/user”).hasRole(“USER") 관리자 시스템 구축 회원 관리 – 권한 부여 권한 관리 – 권한 생성, 삭제 자원 관리 – 자원 생성, 삭제, 수정, 권한 매핑 권한 계층 구현 URL – Url 요청 시 인가 처리 Method – 메서드 Method Pointcut

ch07. Ajax 로그인 구현 & CSRF 설정

헤더 설정 전송 방식이 Ajax 인지의 여부를 위한 헤더 설정 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); CSRF 같은 경우 AJAX 같은 경우 직접 생성해 주어야 한다. var csrfHeader = $('meta [name="_csrf_header"]'). attr('content') var csrfToken = $('meta [name="_csrf"]'). attr('content’) xhr.setRequestHeader(csrfHeader, csrfToken); Login.html 아이디와 비밀번호를 입력해주세요 잘못된 아이디나 암호입니다 로그인 csrf 값을 Ajax로 전달한다. home.html 대시보드 마이페이지 메시지 환경설정..

ch06. Ajax Custom DSLs 구현하기

DSL : 도메인 특화 언어(시큐리티에서 특정 도메인을 접근할 수 있도록 제공한다) Custom DSLs AbstractHttpConfigurer 스프링 시큐리티 초기화 설정 클래스 필터, 핸들러, 메서드, 속성 등을 한 곳에 정의하여 처리할 수 있는 편리함 제공 public void init(H http) throws Exception - 초기화 public void configure(H http) – 설정 HttpSecurity 의 apply(C configurer) 메서드 사용 이전 코드 public class AjaxLoginConfigurer extends AbstractAuthenticationFilterConfigurer { private AuthenticationSuccessHandler ..

ch05. 인증 및 인가 예외 처리 - AjaxLoginUrlAuthenticationEntryPoint, AjaxAccessDeniedHandler

FilterInterceptor 필터에서 해당 자원에 접근할 자격이 있는지를 최종 판단한다. 1. 인증이 없는 사용자가 접근 시 인증을 다시 받도록 동작시킨다 -> AjaxLoginUrlAuthenticationEntryPoint 2. 권한이 없는 사용자가 접근시 권한이 없다는 예외를 발생시킨다. ->AjaxAccessDeniedHandler AjaxLoginUrlAuthenticationEntryPoint ExceptionTranslationFilter에서 인증 예외 시 호출 AuthenticationEntryPoint 인터페이스 구현 인증 오류 메시와 401 상태 코드 반환 response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized")..

ch04. 인증 핸들러 - AjaxAuthenticationSuccessHandler, AjaxAuthenticationFailureHandler

AjaxAuthenticationSuccessHandler AuthenticationSuccessHandler 인터페이스 구현 Response Header 설정 response.setStatus(HttpStatus.OK.value()); esponse.setContentType(MediaType.APPLICATION_JSON_VALUE); JSON 형식으로 변환하여 인증 객체 리턴 함 objectMapper.writeValue(response.getWriter(), ResponseBody.ok(userDto)); public class AjaxAuthenticationSuccessHandler implements AuthenticationSuccessHandler { private ObjectMapper..

ch03. 인증 처리자 - AjaxAuthenticationProvider

AuthenticationProvider 인터페이스 구현 인증 작동 조건 supports(Class authentication) ProviderManager 로부터 넘어온 인증 객체가 AjaxAuthenticationTokenAjaxAuthenticationToken 타입이면 작동 인증 검증이 완료되면 AjaxAuthenticationToken 생성하여 최종 인증 객체 반환 AjaxAuthenticationProvider public class AjaxAuthenticationProvider implements AuthenticationProvider { @Autowired private UserDetailsService userDetailsService; @Autowired private Passwor..

ch02. 인증 필터 - AjaxAuthenticationFilter

AbstractAuthenticationProcessingFilter 상속 대부분의 인증을 하는 클래스들은 이를 상속받아 구현한다 필터 작동 조건 AntPathRequestMatcher("/api/login")로 요청정보와 매칭하고 요청 방식이 Ajax 이면 필터 작동 AjaxAuthenticationToken 생성하여 AuthenticationManager에게 전달하여 인증처리 Filter 추가 http.addFilterBefore(AjaxAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) 우리가 만든 필터를 UsernamePasswordAuthenticationFilter 전에 동작시키도록 한다. Filter public class..

ch01. 흐름 및 개요

인증 AjaxAuthenticationFilter에서 인증 요청을 받는다 AjaxAuthenticationToken, AjaxAuthenticationManager, AjaxAuthenticationProvider를 만들어 인증처리를 한다. 인증 성공 = AjaxAuthenticationSuccessHandler 인증 실패 = AjaxAuthenticationFailureHandler 인가 FilterSecurityInterceptor 에서 권한 체크 만약 AuthenticationException, AccessDeniniedEception일 발생할 경우 ExceptionTranslationFilter에서 잡는다. 인증이 실패했을경우 AjaxUrlAuthenticationEntryPoint에서 어떤 행동..

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 인증 거부 처리(Access Denied)

인증은 성공한 사용자가 자원에 접근할 권한이 없을 경우 ExceptionTranslateFilter에서 잡게 되고, CustomHandler를 실행시켜 줄 수가 있다. CustomAccessDeniedHandler 사용자가 접근할수 없는 URL인 것을 알려주고, 파라미터로 Exception을 전달하여 준다. SecurityContext 인증에 성공한 뒤, 접근 권한이 없을 경우 /denied로 redirect 한다 denied.html 대시보드 마이페이지 메시지 환경설정 님은 접근 권한이 없습니다.

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 인증 실패 핸들러(CustomAuthenticationFailureHandler)

FailureHandler 등록 @Component public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { String errorMessage = "Invalid Username or Password"; if(exception instanceof BadCredentialsExc..