2012-10-29 46 views
22

Tôi mới vào Mùa xuân:Bảo mật mùa xuân - Chuyển hướng nếu đã đăng nhập

Tôi không muốn người dùng được xác thực truy cập trang đăng nhập. Cách thích hợp để xử lý chuyển hướng cho '/ login' nếu người dùng đã được xác thực là gì? Nói, tôi muốn chuyển hướng đến '/ index' nếu đã đăng nhập.

Tôi đã thử 'isAnonomous()' khi đăng nhập, nhưng nó chuyển hướng để truy cập trang bị từ chối.

<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> 
+0

có thể trùng lặp của [Cách chuyển hướng đến trang chủ nếu người dùng truy cập trang đăng nhập sau khi đăng nhập?] (Http://stackoverflow.com/questions/12597519/how-to-redirect-to-the-homepage -if-người dùng-truy cập-the-login-trang-sau-được) – Xaerxess

+0

http://stackoverflow.com/questions/32225414/spring-security-login-issue-after-re-login-in-same- phiên/32325358 # 32325358 Vấn đề này được giải quyết trên liên kết này.Vui lòng xem – parshant

Trả lời

35

Trong các chức năng điều khiển của trang đăng nhập của bạn:

  1. kiểm tra nếu người dùng đang đăng nhập

  2. sau đó chuyển tiếp anh ta để trang chỉ mục trong trường hợp đó..

đang liên quan:

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

if (!(auth instanceof AnonymousAuthenticationToken)) { 

    /* The user is logged in :) */ 
    return new ModelAndView("forward:/index"); 
} 
+4

Điều đó sẽ chỉ hoạt động đối với các trường hợp như đăng nhập -> nhà riêng. Điều gì xảy ra nếu tôi đã đăng nhập và nhập url đăng nhập vào thanh địa chỉ? Nó sẽ có ý nghĩa để có được chuyển hướng đến trang chủ (hoặc bất cứ nơi nào tôi đã là) một lần nữa ... –

+0

Nó làm việc cho tôi. Cảm ơn bạn – zameer

0

hey bạn có thể làm điều đó.

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

Phương pháp này rất đơn giản và thuận tiện, phải không?

1

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

Để chuyển hướng thành công từ trang đăng nhập, nếu người dùng đã đăng nhập, thêm dòng sau vào login.jsp của bạn:

Add tiêu đề taglib bảo mật ở đầu jsp của bạn:

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

Sau đó, thêm thẻ sau bên trong "đầu" thẻ của bạn (tốt nhất là gần đầu trang):

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

này sẽ chuyển hướng đến main.html (hoặc bất kỳ .jsp chính của bạn là ánh xạ tới) nếu việc truy cập người dùng trang đăng nhập đã được đăng nhập. Làm điều này thông qua bộ điều khiển không hoạt động với tôi, vì thực hành trang đăng nhập hợp lệ là để bean "form-login" của bảo mật mùa xuân thực hiện tất cả công việc chuyển hướng, vì vậy không có bộ điều khiển đăng nhập nào để sửa đổi .

Các vấn đề liên quan