发表于: 2018-02-02 23:02:32
3 571
今天完成的事
完成拦截器的代码编写
public class UserInterceptor extends HandlerInterceptorAdapter{
private static final Log log = LogFactory.getLog(UserInterceptor.class);
@Autowired
private UserService userService;
public static String SPLITTER_REGEX = "\\|";
public static final String USER_ID = "userId";
@Autowired
private CookieUtil cookieUtil;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception{
//使用枚举类打印出request中所有参数
log.info(" request uri: " + request.getRequestURI());
log.info("request token" + request.getHeader("token"));
Enumeration<String> names = request.getParameterNames();
log.info("the token is:" + request.getParameter("token"));
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = request.getParameter(name);
log.info(" Parameter name : " + name + " value : " + value);
}
//从request获取名为token的参数
String token = request.getParameter("token");
//如果没取到就尝试从请求头获取
if(token == null){
token = request.getHeader("token");
}
log.info("get the token in request:"+token);
//从token中获取用户信息
if(token != null){
Map map = this.decodeCookie(token);
log.info("the map is :"+map);
Long uid = null;
User user = null;
//从Map中获取用户信息
if(map != null){
uid = (Long) map.get(USER_ID);
log.info("get the user id :"+uid);
}else {
log.info("the map is null");
return noLogin(request,response);
}
//判断用户状态
if(uid != null){
user = userService.getObjectById(uid);
log.info("get the user :"+user);
if(user != null){
if (user.getStatus().equals(Constant.FROZEN)){
log.info("the user is frozen");
return userOff(request,response);
}
//将用户信息放到request中
request.setAttribute("user", user);
}else {
log.info("the user is not exist");
return noLogin(request,response);
}
}else {
log.info("the user id is null");
return noLogin(request,response);
}
}else {
//从cooke中获取uid
Long uid = cookieUtil.getID(request);
log.info("the user id is :"+uid);
if(uid == null){
log.info("the user id is null");
return noLogin(request,response);
} else {
log.info("get the user id from cookie:"+uid);
User user = userService.getObjectById(uid);
if(user == null){
log.info("the user is not exist");
return noLogin(request,response);
}else {
if(user.getStatus().equals(Constant.FROZEN)){
log.info("the user is frozen");
return userOff(request,response);
}
log.info("get the user :"+user);
request.setAttribute("user",user);
}
log.info("get uid is " + uid);
return true;
}
}
return true;
}
private Map decodeCookie(String value) {
if (StringUtils.isBlank(value)) {
log.info("the value can not be null");
return null;
}
try {
String[] p = value.split(SPLITTER_REGEX);
Long userId = new Long(p[0]);
String crypt = p[1];
String plainUserInfo = UserCryptUtil.userDecrypt(crypt);
String userName = UserCryptUtil.getUserNameFromPlain(plainUserInfo);
Long uid = UserCryptUtil.getUserIdFromPlain(plainUserInfo);
if (userId.equals(uid)) {
log.info("get the userInfo from token");
return getUserIdentity(userName, userId);
}
} catch (Exception e) {
e.printStackTrace();
log.error("Wrong cookie format: [" + value + "] message is:" + e.getMessage());
return null;
}
return null;
}
public static Map getUserIdentity(String userName, Long userId) {
Map map = new HashMap();
map.put(CookieUtil.USER_NAME, userName);
map.put(CookieUtil.USER_ID, userId);
return map;
}
private Boolean noLogin(HttpServletRequest request,HttpServletResponse response){
log.info(" user don't login");
RequestDispatcher rd = request.getRequestDispatcher("/r/json/noLogin.json");
try {
rd.forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
log.error("noLogin() error:"+e.getMessage());
} catch (IOException e) {
e.printStackTrace();
log.error("noLogin() error:"+e.getMessage());
}
return false;
}
private boolean userOff( HttpServletRequest request,HttpServletResponse response)
throws IOException {
log.info(" user is freeze");
//清除用户Cookie
cookieUtil.clearCookie(response);
RequestDispatcher rd = request.getRequestDispatcher("/r/json/statusOff.json");
try {
rd.forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView)
throws Exception {
log.info("p =========================================== ");
}
/**
* 获取跳转链接的地址
*
* @param request
* @return
*/
public String getInterceptorUrl(HttpServletRequest request) {
String interceptorUrl = request.getRequestURI()
+ (null == request.getQueryString() ? "" : "?" + request.getQueryString()).toString();
interceptorUrl = interceptorUrl.replace("/app/", "/");
log.info("get getInterceptorUrl is " + interceptorUrl);
return interceptorUrl;
}
}
遇到的问题:微信登录完全没有思路 好在网上找到了比较好的入门视频
明天的计划:开始搞微信登录,看了视频之后微信的开发文档也能看的懂了,实现的方法就是使用httpclint执行url,通过code获得access_token,再通过token获取oppenid和微信用户信息
收获:微信登录的实现逻辑
任务进度:微信登录
开始时间:2017.12.12
预计demo时间:2018.02.08
禅道:http://task.ptteng.com/zentao/project-burn-506.htm
评论