<JSP 부분>
1. 로그인 하지 않은 사용자에게 보여주고 싶을때
<sec:authorize access="isAnonymous()"> </sec:authorize>
2. 로그인 한 사용자에게 보여주고 싶을때
<sec:authorize access="isAuthenticated()"> </sec:authorize>
3. 로그인 한 사용자의 정보를 뽑아내고자 할때
<sec:authentication property="principal.memberDTO.mName" />
이런식으로 사용할 수 있습니다.
principal은 스프링이 User를 spring security context(스프링이 관리해주는 세션)에 등록하는 변수명입니다.
인터페이스 타입의 UserDetails를
User클래스가 구현하고
User 클래스를 extends하는 CustomUser 클래스를 만들었고
CustomUser 클래스는 멤버변수로 우리의 MemberDTO를 가지고 있습니다. (헥헥..)
즉 getPrincipal(=UserDetails => User =>CustomUser) -> getMemberDTO -> getMName 의 순서로 변수를 가져오게 되는 것입니다. 동일한 방식으로 MemberDTO의 다른 변수들도 뽑아낼 수 있습니다. @Data어노테이션으로 getter setter를 미리 만들어 두었으니까요! (이메일, 권한 등등.)
4. 로그인한 사용자의 이메일 정보를 뽑아내어 input값을 박아놓기
이런식으로 활용할 수 있습니다.
글을 등록할때 유저가 임의로 본인의 이메일을 조작하지 않도록 readonly를 걸어줍니다.
5. 현재 로그인 한 유저 = 해당 글을 쓴 유저일때만 modify버튼을 보여주기
+
ADMIN유저는 모든 항목에 접근가능하도록 보여주기
var 로 해당 로그인한 유저의 이메일을 변수로 만든뒤
해당 로그인한 유저(loginUser) = 해당 글을 쓴 유저( dto.mEmail) 일때만 버튼이 보이도록 if문으로 검사 합니다.
혹은
mGrade를 변수로 받아서 ADMIN일때도 수정,삭제가 가능하도록 합니다.
동일한 작업을 read, modify페이지 둘다 해줍시다.
6. ajax의 하드코딩한 mEmail변수를 수정하기
<Controller 부분>
1. 유저정보를 확인하고 싶을때
Authentication 이라는 타입을 이용하여 뽑아낼 수 있습니다.
이런식으로... 확인할 수 있습니다.
로그 찍어가면서 원하는 변수를 겹겹이 빼내면 됩니다!
2. @GetMapping 접근제어하기
jsp에서 버튼을 숨기더라도 url을 이미 알고있다면 유저는 해당 페이지에 접근할 수 있습니다. 따라서 백엔드에서도 이것을 막아주어야합니다.
@PreAuthorize("isAuthenticated()")
어노테이션을 활용하여 로그인 한 유저만 글을 등록할 수 있게 합니다.
3. @PostMapping 접근제어하기
로그인한 유저==해당 글을 등록한 유저
or
권한 ==ADMIN
일 경우에만 글을 수정, 삭제 할 수 있도록 @PostMapping부분을 접근제어해줍니다.
툴을 사용하면 GetMapping을 막아둔 경우에도 @PostMapping으로 접근하여 글을 수정,삭제할수있기 때문입니다.
댓글 없음:
댓글 쓰기