在登錄的時候,不只是客戶端能登錄,服務器端,也是一個完整的登錄項目。
通過前面兩篇可以看出,我的架構用的是spring 的MVC和spring註解,其實我根本就不明白,只是會用那麼一點。
下面是登錄方法的代碼,包括,本地登錄,和客戶端的登錄兩種。
- package com.tujia.tuuser.controller;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.Map;
- import javax.annotation.Resource;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.util.WebUtils;
- import com.tujia.common.config.ResultCode;
- import com.tujia.common.exception.UnAuthedException;
- import com.tujia.core.security.SecurityUtil;
- import com.tujia.core.util.Md5Util;
- import com.tujia.core.util.ParamChecker;
- import com.tujia.tuuser.entity.User;
- import com.tujia.tuuser.service.UserService;
- @Controller
- public class UserLoginController extends BaseController {
- @Resource
- private UserService UserService;
- @Resource
- private SecurityUtil securityUtil;
- @RequestMapping(value = "/tulogin", produces = "text/html")
- public String listByUser(Model model,HttpServletRequest request, HttpServletResponse response) {
- securityUtil.requrl(request,response);
- return "tulogin";
- }
- /**
- * 登錄方法/本地登錄
- * @param map
- * @param request
- * @param response
- */
- @RequestMapping(value = "/tulogin")
- public void loginServer(@RequestBody Map<String, Object> map,
- HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
- response.setCharacterEncoding("UTF-8");
- String phone = (String) map.get("phone");
- String password = Md5Util.md5((String) map.get("password"));
- ResultCode resultCode = ResultCode.SUCCEED;
- Object result = null;
- try {
- ParamChecker.notEmpty("phone", phone);
- ParamChecker.notEmpty("password", password);
- User user = UserService.login(request, response, phone, password);
- String requrlCookie = securityUtil.getReqURL(request,response);
- result = requrlCookie;
- } catch (UnAuthedException e) {
- logger.error(e.getMessage());
- resultCode = e.getResultCode();
- result = e.getMessage();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- resultCode = ResultCode.INTERNAL_ERROR;
- result = e.getMessage();
- }
- setResponse(response, resultCode, result);
- }
- /**
- * 退出接口
- */
- @RequestMapping(value = "/tulogout",method =RequestMethod.POST)
- public void logout(
- HttpServletRequest request, HttpServletResponse response) {
- ResultCode resultCode = ResultCode.SUCCEED;
- UserService.logout(request, response);
- Object result = null;
- setResponse(response, resultCode, result);
- }
- //登錄接口,客戶端通過此方法進行登錄。
- @RequestMapping(value = "/tuloginMethod")
- public void login(@RequestBody Map<String, Object> map,
- HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
- response.setCharacterEncoding("UTF-8");
- String phone = (String) map.get("phone");
- String password = Md5Util.md5((String) map.get("password"));
- ResultCode resultCode = ResultCode.SUCCEED;
- Object result = null;
- User user = null;
- String token = null;
- try {
- ParamChecker.notEmpty("phone", phone);
- ParamChecker.notEmpty("password", password);
- user = UserService.login(request, response, phone, password);
- token = (String) request.getAttribute("token");
- } catch (UnAuthedException e) {
- logger.error(e.getMessage());
- resultCode = e.getResultCode();
- result = e.getMessage();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- resultCode = ResultCode.INTERNAL_ERROR;
- result = e.getMessage();
- }
- setResponseMethod(response, resultCode, result, user , token);
- }
- //tokenMethod,通過token,客戶端驗證用戶是否登錄。
- @RequestMapping(value = "/tokenMethod")
- public void tuloginMethod(@RequestBody Map<String, Object> map,
- HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
- response.setCharacterEncoding("UTF-8");
- String token = (String) map.get("token");
- boolean tokenServer = securityUtil.getAuthTuUser(token);
- String ret = "";
- try {
- PrintWriter out = response.getWriter();
- if(tokenServer){
- ret = "success";
- out.println(ret);
- out.close();
- }else{
- ret = "noLogin";
- out.println(ret);
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
其中,在方法後面的
- setResponseMethod
下面是代碼。
- protected void setResponse(HttpServletResponse resp, ResultCode resultCode,
- Object result) {
- setResponse(resp, resultCode, result, null);
- }
- protected void setResponse(HttpServletResponse resp, ResultCode resultCode,
- Object result, String callback) {
- try {
- resp.setCharacterEncoding("utf-8");
- PrintWriter out = resp.getWriter();
- Map<String, Object> ret = new LinkedHashMap<String, Object>();
- ret.put("code", resultCode.getCode());
- ret.put("data", result);
- String responseStr = GSON.toJson(ret);
- out.println(responseStr);
- out.close();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- }
另一個,是給客戶端傳遞值的。代碼如下。
- protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,
- Object result,User user,String token) {
- setResponseMethod(resp, resultCode, result,user,token , null);
- }
- protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,
- Object result,User user ,String token , String callback) {
- try {
- resp.setCharacterEncoding("utf-8");
- PrintWriter out = resp.getWriter();
- Map<String, Object> ret = new LinkedHashMap<String, Object>();
- ret.put("code", resultCode.getCode());
- ret.put("data", result);
- ret.put("user", user);
- ret.put("token", token);
- String responseStr = GSON.toJson(ret);
- out.println(responseStr);
- out.close();
- resp.setCharacterEncoding("utf-8");
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- }
這兩個傳遞的json,引發出來兩個問題,
一個是,在JS中,怎樣解析JSON,獲取其中的數據。
一個是,json中的json怎樣轉化成User對象。
這兩個問題,都看另外兩篇文章吧。
http://blog.csdn.net/u012246342/article/details/46801423