본문 바로가기
Spring

로그인 된 상태에서만 글쓰기를 할 수 있도록 설정하기

by allwing12 2022. 11. 9.

최근에 회원가입 시 alert 창으로 회원가입이 완료되었다는 것을 뜨게 하는 것을 했는데

이번에는 어떻게 해야할까 머리를 굴리다가 그냥 한 번 해봤는데 된 로그인이 된 상태에서만 글쓰기에 접근해서

글을 쓸 수 있도록 하는 것을 구현해보았다.

 

<a class="nav-link" sec:authorize="isAnonymous()" th:href="@{/login}" style="font-family: 'Do Hyeon', sans-serif; font-weight:bold; font-size:18px; position:absolute; margin-left:-30px;">로그인</a>
<a class="nav-link" sec:authorize="isAuthenticated()" href="Logout" style="font-family: 'Do Hyeon', sans-serif; font-weight:bold; font-size:18px; position:absolute; margin-left:-30px;">로그아웃</a>

 

우선 기본 navbar에서 로그인 로그아웃시 설정한 것을 보면 된다.

sec:authorize="isAnonymous()"

sec:authorize="isAuthenticated()"

이렇게 두 가지가 이번 글에 제일 핵심이라고 생각하면 된다.

 

우선 isAnonymous() 는 권한이 어떤 권한이든 보이는거라고 생각을 하면 된다.

그래서 로그인 이라는 글씨가 보이는 이유는 그냥 어떤 홈페이지를 들어갔을 때 로그인 버튼이 있고

그 로그인 버튼을 눌러서 로그인 페이지로 넘어가고 로그인을 하기 때문에 로그인은 어떠한 권한이 없어도

그냥 보여야 하기 때문이다.

그리고 isAuthenticated() 는 Role에서 설정한 권한이 있는 사람한테 보여주는 거라고 생각하면 된다.

그렇기 때문에 로그인을 한 후에는 권한이 있는 사람으로 분류가 되기 때문에 로그아웃이라는 글씨가 보이게 된다.

 

꼭 isAnonymous() 나 isAuthenticated() 를 써야하는 건 아니다

아까 말한 것 처럼 Role과 httpservlet 과 연관이 되어있는거라서 Role에서 설정한 권한이 중요하다

그렇기 때문에 hasRole("admin") 이런식으로 해도 상관은 없다.

 

그렇다면 이제 중요한 로그인을 한 상태 즉, navbar가 로그아웃으로 보이는 상태일 때만 글쓰기를 할 수 있도록 설정한 것도

isAnonymous() 와 isAuthenticated() 를 활용을 했다.

 

<a class="nav-link" sec:authorize="isAnonymous()" th:href="@{/login_errors}" style="width:100px; height:40px; color:white; font-family: 'Do Hyeon', sans-serif; font-size:20px; font-weight:bold; padding-top:10px; padding-left:27px;">글쓰기</a>
<a class="nav-link" sec:authorize="isAuthenticated()" th:href="@{/writer}" style="width:100px; height:40px; color:white; font-family: 'Do Hyeon', sans-serif; font-size:20px; font-weight:bold; padding-top:10px; padding-left:27px;">글쓰기</a>

 

보이는 건 똑같이 글쓰기라는 글씨가 보이지만 로그인 상태가 아닐 경우에는 th:href로 인해서 login_errors 라는 폼으로 이동한다.

login_errors라는 폼은 밑에 코드를 올려놓겠다 !

그리고 isAuthenticated() 를 활용해서 일부 권한이 있는 사람한테 즉, navbar에 로그아웃으로 보이는 사람한테는

th:href로 인해 writer 폼으로 글쓰기 폼으로 이동하도록 해놨따.

 

<html>
<head>
</head>
<body>
<script type="text/javascript">
            var log = alert('로그인이 필요한 서비스 입니다.');
            log;
            location.href = "/login";
</script>
</body>
</html>

login_errors 폼은 위와 같은 코드다

그냥 alert로 로그인이 필요한 서비스 입니다 라는 에러창이 뜬 후 login을 할 수 있도록 로그인 폼으로 이동한다.

결국 isAnonymous() 와 isAuthenticated() 를 활용해서 로그인이 되어있는 상태에서만 글쓰기가

가능하도록 하는 기능을 구현을 했는데 당연히 뭔가 문제가 있을 수 있기는 하겠지만... 일단 당장은 이게 최선이지 않을가..

 

 

댓글