복붙노트

[SPRING] 스프링 보안 - 이미 로그인 한 경우 리디렉션

SPRING

스프링 보안 - 이미 로그인 한 경우 리디렉션

나는 봄이 처음이다.

인증 된 사용자가 로그인 페이지에 액세스하는 것을 원하지 않습니다. 사용자가 이미 인증 된 경우 '/ login'에 대한 리디렉션을 처리하는 적절한 방법은 무엇입니까? 이미 로그인 한 경우 '/ index'로 리디렉션하고 싶습니다.

로그인시 isAnonomous ()를 시도했지만 거부 된 페이지로 리디렉션됩니다.

<security:http auto-config="true" use-expressions="true" ...>
    <form-login login-processing-url="/resources/j_spring_security_check"
                 default-target-url="/index"
                login-page="/login" authentication-failure-url="/login?login_error=t" />
    <logout logout-url="/resources/j_spring_security_logout"  />
   ...
  <security:intercept-url pattern="/login" access="permitAll" />
  <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>

해결법

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

    1.로그인 페이지의 컨트롤러 기능 :

    로그인 페이지의 컨트롤러 기능 :

    관련 코드 :

    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    
    if (!(auth instanceof AnonymousAuthenticationToken)) {
    
        /* The user is logged in :) */
        return new ModelAndView("forward:/index");
    }
    
  2. ==============================

    2.로그인 페이지에서 성공적으로 리디렉션하려면 사용자가 이미 로그인 한 경우 login.jsp에 다음을 추가하십시오.

    로그인 페이지에서 성공적으로 리디렉션하려면 사용자가 이미 로그인 한 경우 login.jsp에 다음을 추가하십시오.

    보안 태그 라이브러리 헤더를 JSP 상단에 추가하십시오.

    <%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
    

    그런 다음 "head"태그 안에 다음 태그를 추가하십시오 (가급적이면 상단 부근).

    <sec:authorize access="isAuthenticated()">
        <% response.sendRedirect("main"); %>
    </sec:authorize>
    

    로그인 페이지에 액세스하는 사용자가 이미 로그인 한 경우 main.html (또는 주 .jsp가 매핑되는 항목)으로 리디렉션됩니다.

    유효한 로그인 페이지 연습은 스프링 보안의 "form-login"빈이 모든 리다이 팅 작업을하도록하는 것이므로 컨트롤러를 통해이 작업을 수행하지 못했기 때문에 수정할 수있는 로그인 컨트롤러가 없었습니다.

  3. ==============================

    3.이봐, 할 수있어.

    이봐, 할 수있어.

    <h:head>
    <sec:authorize access="isAuthenticated()">
        <meta http-equiv="refresh" content="0;url=http://your index.xhtml url (full url)" /> 
    </sec:authorize>
    </h:head>
    

    이 방법은 매우 간단하고 편리합니다. 그렇지 않습니까?

  4. ==============================

    4.login.xhtml

    login.xhtml

    <h:head >
        <f:metadata>
          <f:event type="preRenderView" listener="#{loginBean.onPageLoad}"/>
      </f:metadata>
    </h:head>
    

    loginBean

    public void onPageLoad(){
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (!(auth instanceof AnonymousAuthenticationToken)) {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect(url);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  5. from https://stackoverflow.com/questions/13131122/spring-security-redirect-if-already-logged-in by cc-by-sa and MIT license