2021-06-25

0625 스프링 시큐리티 jsp, controller에서 사용하기

<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()")

어노테이션을 활용하여 로그인 한 유저만 글을 등록할 수 있게 합니다.



동일하게, RestController에도 접근제어를 걸어줍니다.


3. @PostMapping 접근제어하기

로그인한 유저==해당 글을 등록한 유저

or

권한 ==ADMIN

일 경우에만 글을 수정, 삭제 할 수 있도록 @PostMapping부분을 접근제어해줍니다.

툴을 사용하면 GetMapping을 막아둔 경우에도 @PostMapping으로 접근하여 글을 수정,삭제할수있기 때문입니다.




댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...