2009-11-18 78 views
7

實現註銷功能,我是新來的Spring Web MVC ..如何使用Spring Web MVC框架

我能得到一些例子或網上鍊接,顯示我如何使用Spring Web MVC框架實現註銷功能?

我不想使用春季安全(即ACEGI)的內置功能..

在此先感謝...

回答

14

會話失效的技巧不起作用。看來Spring認證在某個地方緩存了會話ID,並且如果會話失效,甚至可以接受COOKIE。

另一種解決方案是手動清除春季安全上下文:

public void manualLogout() { 
    SecurityContextHolder.getContext().setAuthentication(null); 
} 

下面是代碼,如何手動登錄用戶(如果有人需要):

public void doManualLogin(HttpServletRequest request, String u, String p) { 
    UsernamePasswordAuthenticationToken token = 
      new UsernamePasswordAuthenticationToken(u, p); 
    token.setDetails(new WebAuthenticationDetails(request)); 
    Authentication auth = authenticationProvider.authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(auth); 
} 

其中AuthenticationProvider的是來自你的豆子彈簧配置實現

org.springframework.security.authentication.AuthenticationProvider 
9

您只需無效會話和用戶登錄出。這由servlet api直接支持:HttpSession.invalidate()。您可以編寫一個只調用invalidate的控制器。

class Logout implements Controller{ 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){ 
    ModelAndView view = //?; 
    request.getSession().invalidate(); 
    return view; 
}  
} 
+0

但這樣一來,還是我的樣本URL將顯示註銷後的頁面.. – Nirmal 2009-11-18 11:05:01

+0

你可以用的getSession(http://java.sun.com/javaee/5檢查/docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28boolean%29)如果會話仍處於活動狀態。或者你在會話中關注你的認證信息。您必須在攔截器或每個控制器中執行此操作。 – 2009-11-18 11:53:01

+0

您可能還需要清除您爲支持「記住我」功能而設置的任何Cookie。否則,您將在下次訪問該網站時立即登錄。 – David 2009-11-18 15:32:46

2
@Controller 
    public class LogoutController { 

     @RequestMapping(value="/logout",method = RequestMethod.GET) 
     public String logout(HttpServletRequest request){ 
      HttpSession httpSession = request.getSession(); 
      httpSession.invalidate(); 
      return "redirect:/"; 
     } 

    } 

請使用上面的代碼來實現註銷過濾

+0

會話過期時它將如何重定向到登錄頁面。你能否提供另一種情況。 – 2017-07-08 19:28:02