单点登录3

来源:互联网 发布:淘宝卖家联系客服电话 编辑:程序博客网 时间:2024/06/05 03:30

在登录的时候,不只是客户端能登录,服务器端,也是一个完整的登录项目。

通过前面两篇可以看出,我的架构用的是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

原创粉丝点击