@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 ;
}
}