JSON乱码的解决方式 和用户中心通用代码

@requestmapping (values="/X/X",produces="text/html;charset=utf-8")

@responseBody  :将controller的方法直接返回给浏览器html显示出来。


/**
 * 拦截器
 * @author
 *
 */
@Component("authInterceptor")
public class AuthInterceptor extends HandlerInterceptorAdapter
{
 @Resource
 private IUsersService usersService;
 

 
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
 {
  ConstatFinalUtil.SYS_LOGGER.info("==AuthInterceptor preHandle==");
  HttpSession session = request.getSession() ;
  
  /* 开发版本不需要启用用户中心 */
  if("0".equalsIgnoreCase(ConstatFinalUtil.CONFIG_JSON.getString("version")))
  {
   /* 开发服务器 */
   /* 查询一个管理员对象放到Session中 */
   Map<String, Object> condMap = new HashMap<String, Object>();
   condMap.put("id", "1");
   AAdmins admins = this.usersService.findOneAdminsService(condMap);
   session.setAttribute("admins", admins);
   return true ;
  }
  
  /* 先检查session是否有值 */
  AAdmins adminsSess = (AAdmins) session.getAttribute("admins");
  if(adminsSess != null)
  {
   return true ;
  }
  
  /* token
   * 如果有多个token:
   * 取最后一个
   *  */
  String[] tokens = request.getParameterValues("token");
  String token = "" ;
  if(tokens != null)
  {
   token = tokens[tokens.length - 1];
  }
  
  /* 传入了token
   * 就是从用户中心跳转过来的
   *  */
  if(!"".equalsIgnoreCase(token))
  {
   /* 到token的颁发中心,去验证一下是不是你颁发的
    * 验证token的接口,我们今天上午写过了
    *  */
   HttpUtil httpUtil = new HttpUtil() ;
   
   /*codeinf
    codeinfo 
    

 

    * 拼装上行的json
    */
   JSONObject requestJSON = new JSONObject() ;
   requestJSON.put("version", "1");
   
   JSONObject dataJSON = new JSONObject() ;
   dataJSON.put("token", token);
   
   requestJSON.put("data", dataJSON);
   
   /* 拼装url */
   /*String url = "http://localhost:8080/userscenter-back/outer/json/verfiyToken.htm?json={%22version%22:%221%22,%22data%22:{%22token%22:%2226174d6f-2cac-4a00-99ff-7d79df12f38a%22}}" ;*/
   String url = ConstatFinalUtil.CONFIG_JSON.getString("userscenter.back.verifyToken.url");
   String params = "?json=" + requestJSON.toJSONString() ;
   url += params ;
   System.out.println("-----url----------" + url);
   String result = httpUtil.methodGet(url);
   System.out.println(result + "==============");
   /*
    * 处理返回值
    * 解析成json
    *  */
   JSONObject resultJSON = (JSONObject) JSON.parse(result);
   /*
    * code:0成功
    * */
   if(resultJSON != null && "0".equalsIgnoreCase(resultJSON.getString("code")))
   {
    JSONObject dataResJSON = (JSONObject) resultJSON.get("data");
    JSONObject adminsJSON = dataResJSON.getJSONObject("admins");
    /*
     * 将token的相关信息存储到客户端的session中
     * 将商城自己的管理员对象存储到session中
     * */
    /* 拿着token对应的adminsJSON它是在用户中心中的数据
     * 拿着用户中心管理员的id(商城数据库里面的ssoId)
     *
     * 查询一下商城的数据库里面有木有管理员.
     * 如果有,更新,
     * 如果木有,添加
     *  */
    String ssoId = adminsJSON.get("id") + "";
    /*
     * 拿着用户中心管理员的id(商城数据库里面的ssoId)
     *
     * 查询一下商城的数据库里面有木有管理员. */
    Map<String, Object> condMap = new HashMap<String, Object>();
    condMap.put("ssoId", ssoId);
    AAdmins adminsRes = this.usersService.findOneAdminsService(condMap);
    
    /*
     * 断言
     *
     * flag:true:添加
     * false:更新
     * */
    boolean flag = false ;
    if(adminsRes == null)
    {
     /* 数据库中不存在 */
     adminsRes = new AAdmins() ;
     /* 创建时间 */
     adminsRes.setCreateTime(new Date());
     flag = true ;
    }
    
    adminsRes.setEmail(adminsJSON.getString("email"));
    adminsRes.setTrueName(adminsJSON.getString("name"));
    /* 如何将字符串变成Date */
    adminsRes.setLastLoginTime(this.dateFormatUtil.strDateTime(adminsJSON.get("lastLoginTime") + ""));
    adminsRes.setUpdateTime(new Date());
    
    /* 啥时候更新,
     * 啥时候添加 */
    JSONObject resultDbJSON = null ;
    if(flag)
    {
     /* 添加 */
     resultDbJSON = this.usersService.saveOneAdminsService(adminsRes);
    }else
    {
     /* 更新 */
     resultDbJSON = this.usersService.updateOneAdminsService(adminsRes);
    }
    
    ConstatFinalUtil.SYS_LOGGER.info("结果:{}",resultDbJSON);
    
    /* 存储的时候要存储对象 */
    session.setAttribute("admins", adminsRes);
    return true ;
   }
  }
  
  /* 需要登陆
   * 获取当前访问的URL
   * 客户端跳转到用户中心的登陆页面,
   * 把returnUrl带上,同时要加密哟(UrlEncode)
   *  */
  String returnUrl = request.getRequestURL() + "";
  String queryStr = request.getQueryString() ;
  /*?后面的参数木有了,
   * 如何获取呢?
   * */
  if(queryStr != null)
  {
   returnUrl += "?" + queryStr ;
  }
  System.out.println("=====returnUrl==========" + returnUrl);
  /*
   * 客户端中转到用户中心
   * http://xxxx:8080/userscenter-back/login.htm?returnUrl
   * */
  String url = ConstatFinalUtil.CONFIG_JSON.getString("userscenter.back.login.url") ;
  url += "&returnUrl=" + URLEncoder.encode(returnUrl,"UTF-8") ;
  System.out.println("=====url========" + url);
  response.sendRedirect(url);
  return false ;
 }
}

转载于:https://my.oschina.net/u/3488467/blog/1359258

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值