單點登錄3

在登錄的時候,不只是客戶端能登錄,服務器端,也是一個完整的登錄項目。

通過前面兩篇可以看出,我的架構用的是spring 的MVC和spring註解,其實我根本就不明白,只是會用那麼一點。

下面是登錄方法的代碼,包括,本地登錄,和客戶端的登錄兩種。

[java] view plain copy
  1. package com.tujia.tuuser.controller;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import java.util.Map;  
  6.   
  7. import javax.annotation.Resource;  
  8. import javax.servlet.http.Cookie;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.ui.Model;  
  14. import org.springframework.web.bind.annotation.RequestBody;  
  15. import org.springframework.web.bind.annotation.RequestMapping;  
  16. import org.springframework.web.bind.annotation.RequestMethod;  
  17. import org.springframework.web.util.WebUtils;  
  18.   
  19. import com.tujia.common.config.ResultCode;  
  20. import com.tujia.common.exception.UnAuthedException;  
  21. import com.tujia.core.security.SecurityUtil;  
  22. import com.tujia.core.util.Md5Util;  
  23. import com.tujia.core.util.ParamChecker;  
  24. import com.tujia.tuuser.entity.User;  
  25. import com.tujia.tuuser.service.UserService;  
  26.   
  27. @Controller  
  28. public class UserLoginController extends BaseController {  
  29.   
  30.     @Resource  
  31.     private UserService UserService;  
  32.     @Resource  
  33.     private SecurityUtil securityUtil;  
  34.       
  35.     @RequestMapping(value = "/tulogin", produces = "text/html")  
  36.     public String listByUser(Model model,HttpServletRequest request, HttpServletResponse response) {  
  37.           
  38.         securityUtil.requrl(request,response);  
  39.         return "tulogin";  
  40.     }  
  41.       
  42.     /** 
  43.      * 登錄方法/本地登錄 
  44.      * @param map 
  45.      * @param request 
  46.      * @param response 
  47.      */  
  48.     @RequestMapping(value = "/tulogin")  
  49.     public void loginServer(@RequestBody Map<String, Object> map,  
  50.             HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {  
  51.         response.setCharacterEncoding("UTF-8");  
  52.         String phone = (String) map.get("phone");  
  53.         String password = Md5Util.md5((String) map.get("password"));  
  54.           
  55.         ResultCode resultCode = ResultCode.SUCCEED;  
  56.         Object result = null;  
  57.           
  58.         try {  
  59.             ParamChecker.notEmpty("phone", phone);  
  60.             ParamChecker.notEmpty("password", password);  
  61.               
  62.               
  63.             User user = UserService.login(request, response, phone, password);  
  64.               
  65.             String requrlCookie = securityUtil.getReqURL(request,response);  
  66.             result = requrlCookie;   
  67.               
  68.         } catch (UnAuthedException e) {  
  69.             logger.error(e.getMessage());  
  70.             resultCode = e.getResultCode();  
  71.             result = e.getMessage();  
  72.   
  73.         } catch (Exception e) {  
  74.             logger.error(e.getMessage(), e);  
  75.             resultCode = ResultCode.INTERNAL_ERROR;  
  76.             result = e.getMessage();  
  77.         }  
  78.         setResponse(response, resultCode, result);  
  79.     }  
  80.       
  81.     /** 
  82.      * 退出接口 
  83.      */  
  84.     @RequestMapping(value = "/tulogout",method =RequestMethod.POST)  
  85.     public void logout(  
  86.             HttpServletRequest request, HttpServletResponse response) {  
  87.         ResultCode resultCode = ResultCode.SUCCEED;  
  88.         UserService.logout(request, response);  
  89.         Object result = null;  
  90.         setResponse(response, resultCode, result);  
  91.     }  
  92.       
  93.       
  94.     //登錄接口,客戶端通過此方法進行登錄。  
  95.     @RequestMapping(value = "/tuloginMethod")  
  96.     public void login(@RequestBody Map<String, Object> map,  
  97.             HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {  
  98.         response.setCharacterEncoding("UTF-8");  
  99.         String phone = (String) map.get("phone");  
  100.         String password = Md5Util.md5((String) map.get("password"));  
  101.         ResultCode resultCode = ResultCode.SUCCEED;  
  102.         Object result = null;  
  103.         User user = null;  
  104.         String token = null;  
  105.           
  106.         try {  
  107.             ParamChecker.notEmpty("phone", phone);  
  108.             ParamChecker.notEmpty("password", password);  
  109.               
  110.               
  111.             user = UserService.login(request, response, phone, password);  
  112.             token = (String) request.getAttribute("token");  
  113.         } catch (UnAuthedException e) {  
  114.             logger.error(e.getMessage());  
  115.             resultCode = e.getResultCode();  
  116.             result = e.getMessage();  
  117.   
  118.         } catch (Exception e) {  
  119.             logger.error(e.getMessage(), e);  
  120.             resultCode = ResultCode.INTERNAL_ERROR;  
  121.             result = e.getMessage();  
  122.         }  
  123.         setResponseMethod(response, resultCode, result, user , token);  
  124.     }  
  125.       
  126.       
  127.     //tokenMethod,通過token,客戶端驗證用戶是否登錄。  
  128.     @RequestMapping(value = "/tokenMethod")  
  129.     public void tuloginMethod(@RequestBody Map<String, Object> map,  
  130.             HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {  
  131.           
  132.         response.setCharacterEncoding("UTF-8");  
  133.         String token = (String) map.get("token");  
  134.         boolean tokenServer = securityUtil.getAuthTuUser(token);  
  135.         String ret = "";  
  136.         try {  
  137.             PrintWriter out = response.getWriter();  
  138.             if(tokenServer){  
  139.                 ret = "success";  
  140.                 out.println(ret);  
  141.                 out.close();  
  142.             }else{  
  143.                 ret = "noLogin";  
  144.                 out.println(ret);  
  145.                 out.close();  
  146.             }  
  147.               
  148.         } catch (IOException e) {  
  149.             e.printStackTrace();  
  150.         }  
  151.     }  
  152. }  

其中,在方法後面的
[java] view plain copy
  1. setResponseMethod  
這個方法,就是傳值的,通過json來傳值。給前臺,或者給客戶端。

下面是代碼。

[java] view plain copy
  1. protected void setResponse(HttpServletResponse resp, ResultCode resultCode,  
  2.             Object result) {  
  3.         setResponse(resp, resultCode, result, null);  
  4.     }  
  5.   
  6.     protected void setResponse(HttpServletResponse resp, ResultCode resultCode,  
  7.             Object result, String callback) {  
  8.         try {  
  9.             resp.setCharacterEncoding("utf-8");  
  10.             PrintWriter out = resp.getWriter();  
  11.   
  12.             Map<String, Object> ret = new LinkedHashMap<String, Object>();  
  13.             ret.put("code", resultCode.getCode());  
  14.             ret.put("data", result);  
  15.             String responseStr = GSON.toJson(ret);  
  16.             out.println(responseStr);  
  17.             out.close();  
  18.   
  19.         } catch (Exception e) {  
  20.             logger.error(e.getMessage(), e);  
  21.         }  
  22.     }  
這個是往前臺頁面傳遞值的。
另一個,是給客戶端傳遞值的。代碼如下。
[java] view plain copy
  1. protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,  
  2.             Object result,User user,String token) {  
  3.         setResponseMethod(resp, resultCode, result,user,token , null);  
  4.     }  
  5.     protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,  
  6.             Object result,User user ,String token , String callback) {  
  7.         try {  
  8.             resp.setCharacterEncoding("utf-8");  
  9.             PrintWriter out = resp.getWriter();  
  10.             Map<String, Object> ret = new LinkedHashMap<String, Object>();  
  11.             ret.put("code", resultCode.getCode());  
  12.             ret.put("data", result);  
  13.             ret.put("user", user);  
  14.             ret.put("token", token);  
  15.             String responseStr = GSON.toJson(ret);  
  16.             out.println(responseStr);  
  17.             out.close();  
  18.             resp.setCharacterEncoding("utf-8");  
  19.               
  20.               
  21.         } catch (Exception e) {  
  22.             logger.error(e.getMessage(), e);  
  23.         }  
  24.     }  

這兩個傳遞的json,引發出來兩個問題,

一個是,在JS中,怎樣解析JSON,獲取其中的數據。

一個是,json中的json怎樣轉化成User對象。

這兩個問題,都看另外兩篇文章吧。


http://blog.csdn.net/u012246342/article/details/46801423

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章