복붙노트

[SPRING] Spring과 Thymeleaf를 사용한 로그 아웃 링크

SPRING

Spring과 Thymeleaf를 사용한 로그 아웃 링크

공식 예제 (Secure Web Content)에 따르면, 스프링 보안으로 로그 아웃을 수행하기 위해 폼과 버튼을 사용해야한다. 단추 대신 Thymeleaf와 링크를 사용하는 방법이 있습니까?

해결법

  1. ==============================

    1.양식을 사용하여 로그 아웃해야합니다. 정말로 링크가 필요한 경우 JavaScript를 사용하여 링크가 숨겨진 양식에서 POST를 수행하도록 할 수 있습니다.

    양식을 사용하여 로그 아웃해야합니다. 정말로 링크가 필요한 경우 JavaScript를 사용하여 링크가 숨겨진 양식에서 POST를 수행하도록 할 수 있습니다.

    <a href="javascript: document.logoutForm.submit()" role="menuitem"> Logout</a>
    
       <form name="logoutForm" th:action="@{/logout}" method="post" th:hidden="true">
          <input hidden type="submit" value="Sign Out"/>
       </form> 
    
  2. ==============================

    2.성공적으로 로그 아웃 을 사용했습니다.

    성공적으로 로그 아웃 을 사용했습니다.

    내가 사용했던 관련 스프링 보안 설정은

     http
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login");
    
  3. ==============================

    3.이 질문의 맥락에서 볼 때 vdenotaris는 로그 아웃 기능을위한 제출 버튼이 아니라 링크를 원한다고 생각합니다. 글쎄, 당신이 할 수있는 일은 다음과 같은 하이퍼 링크를 만드는 것입니다.

    이 질문의 맥락에서 볼 때 vdenotaris는 로그 아웃 기능을위한 제출 버튼이 아니라 링크를 원한다고 생각합니다. 글쎄, 당신이 할 수있는 일은 다음과 같은 하이퍼 링크를 만드는 것입니다.

    <a href="#" th:href="@{/logout}">Log Out</a>
    

    아래의 매핑을 가진 컨트롤러를 생성하십시오 :

    @RequestMapping(value="/logout", method = RequestMethod.GET)
    public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth != null){    
            new SecurityContextLogoutHandler().logout(request, response, auth);
        }
        return "redirect:/login?logout";
    }
    
  4. ==============================

    4.이 솔루션은 다음과 같습니다.

    이 솔루션은 다음과 같습니다.

           .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/login");
    

    위에서 언급 한 것처럼 보안을 위해 GET 요청 대신 POST를 사용하는 것이 좋습니다.

  5. ==============================

    5.그게 옳은 대답입니다.

    그게 옳은 대답입니다.

    <form th:action="@{/logout}" method="post">
        <input type="submit">POST LOGOUT</input>
    </form>
    
  6. ==============================

    6."CSRF 공격으로부터 보호하기 위해 기본적으로 Spring Security Xml Configuration 로그 아웃에는 다음이 필요합니다.

    "CSRF 공격으로부터 보호하기 위해 기본적으로 Spring Security Xml Configuration 로그 아웃에는 다음이 필요합니다.

    안녕하세요 봄 보안 XML 구성

    <form th:action="@{/logout}" method="post">
        <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" /> 
        <input type="submit">LOGOUT</input>
    </form>
    
  7. from https://stackoverflow.com/questions/22557741/logout-link-with-spring-and-thymeleaf by cc-by-sa and MIT license