Spring.14_Spring Security(2)

이혜민·2024년 9월 23일

spring

목록 보기
15/18
post-thumbnail

< 수업 순서 - 2024.09.23 >

  • UserDetails 객체에는 username, password, enabled 정보만 저장되어 있음 - principal 객체에 userdetails 정보가 저장되어 있다.
  • So, CustomUserDetails를 만들어 더 다양한 정보를 저장하여 사용

⭐로그인 페이지 커스터마이징

01. security-context.xml

02. LoginController : 클라이언트가 /user_login 페이지를 GET 방식으로 요청할 때 호출되는 요청 처리 메소드 작성

03. form_login.jsp(로그인 페이지 커스터마이징)

  • posr방식으로 값을 전달할 때 무조건 아이디는 username, 비밀번호는 password 으로 작성해야함

  • but 커스터마이징을 하고 싶으면 security-context.xml 에서 login-form 엘리먼트를 사용하여 수정

  • /user_login 페이지 요청하는 요청 처리 메소드를 만들 필요 없음.

  • username-parameter : 로그인 처리 페이지에게 아이디를 전달할 때 사용할 이름(name 속성값)을 속성값으로 설정 - 미설정시 아이디는 반드시 [username] 속성값으로 설정

  • password-parameter : 로그인 처리 페이지에게 비밀번호를 전달할 때 사용할 이름(name 속성값)을 속성값으로 설정 - 미설정시 아이디는 반드시 [password] 속성값으로 설정

04. main_page.jsp(수정)

  • user_login 페이지 요청 시

📍로그인 사용자와 비로그인 사용자가 다른 페이지 출력

05. HomeController

  • home() 요청 처리 메소드에 매개변수로 Principal 인터페이스를 설정하면 프론트 컨트롤러에게 Principal 객체를 제공받을 수 있음
  • Principal 객체 : 로그인 사용자 정보가 저장된 객체 - 로그인 사용자 아이디만 제공

  • 로그인하지 않은 사용자가 요청하면 500 에러 - if문 사용

  • principal 객체 사용 비권장

  • 요청 처리 메소드의 매개변수를 Authentication 인터페이스로 작성하면 Front Controller에게 Authentication 객체를 제공받아 사용 가능

  • Authentication 객체 : 로그인 사용자 및 권한 정보가 저장된 객체

  • Authentication.getPrincipal() : 로그인 사용자 및 권한 정보가 저장된 UserDetails 객체(CustomUserDetails 객체)를 반환하는 메소드
    → Object 객체를 반환하므로 명시적 객체 형변환 후 사용

06. main_page.jsp(수정)

  • security 태그 라이브러리를 JSP 문서에 포함해 Spring Security 관련 태그 사용
  • 로그인 시 로그인 태그 미출력

  • 로그인 시 출력

  • UserDatails 인터페이스를 상속받은 클래스(CustomUserDetails 클래스)로 인증된 사용자 정보가 저장되어 있는 경우 클래스의 필드값을 제공받아 사용 가능

  • 출력시


📍로그인 실패시 에러메세지 출력

07. form_login.jsp

  • security_message.properties 파일에 저장된 메세지 출력

  • 출력시


📍로그아웃

08. security-context.xml


📍로그인 실패 시 아이디 고정

08. security-context.xml

09. CustomLoginFailureHandler : 인증 실패 후 실행될 기능을 제공하기 위한 클래스

  • security-context.xml : auth 패키지의 하위 클래스에 component 어노테이션 작성 시 Spring Bean으로 등록

  • 출력시

10. CustomLoginSuccessHandler : 인증 성공 후 실행될 기능을 제공하기 위한 클래스 - 사용자가 가지고 있는 권한에 따라 요청하는 페이지를 상이하게 하기위해 작성

  • 인증 성공 후 사용자 권한에 따라 다른 페이지로 이동하는 기능을 제공

  • 인증 성공시 자동 호출되는 메소드인 onAuthenticationSuccess() 메소드를 오버라이드

  • 로그인 사용자의 권한을 저장하기 위한 List 객체 생성 - roleNames

  • CustomUserDetails 클래스에 작성된 메소드

  • 인증된 사용자에 대한 모든 권한 정보가 요소값으로 저장된 List 객체를 반환하는 메소드를 호출하여 향상된 for문을 이용해 roleNames에 List 객체를 저장

  • Collection 객체에 저장된 요소값을 매개변수로 전달받은 값과 비교하여 요소값이 없으면 false 있으면 true를 반환하는 메소드를 요청해 클라이언트에게 URL 주소를 전달하여 응답 처리


📍embed 태그를 사용해 파일 출력

11. main_page.jsp

  • embed 태그 : 내장 브라우저를 사용해 파일을 제공받아 출력하는 태그

    • src 속성 : 내장 브라우저에 출력될 파일의 URL 주소를 속성값으로 설정
  • 기본적으로 Spring Security는 내장 브라우저를 이용해 파일을 출력하는 것을 막아 놓는다.

  • 해제 방법 : security-context.xml - http 엘리먼트 내에 작성


📍로그인 사용자의 권한이 없는 페이지를 요청시 403 에러 대신 에러페이지로 응답 처리

12. security-context.xml

13. access_denied.jsp


< 수업 순서 - 2024.09.24 >

📍보안성 강화를 위해 에러메세지 커스터마이징

01. security-context.xml

02. CustomAccessDeniedHandler : 접근이 제한된 페이지를 요청할 경우 호출될 메소드가 작성된 클래스 - AccessDeniedHandler 인터페이스를 상속받아 작성

  • @Component 어노테이션을 작성해 Spring Bean 등록
  • 접근이 제한된 페이지를 요청할 경우 자동 호출되는 메소드 작성 - 오버라이드

0개의 댓글