所有回答列表(1)
最代码官方 LV168
2015年2月27日
最代码的记住登陆机制是通过客户端cookie和服务端session实现的。
拦截器代码
UserInterceptor.java
package com.zuidaima.interceptor;
import java.util.Date;
import java.util.List;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.javaniu.core.constants.GlobalConstants;
import com.javaniu.core.constants.ModuleConstants;
import com.javaniu.core.module.User;
import com.javaniu.core.module.support.ModuleDesc;
import com.javaniu.core.service.UserService;
import com.javaniu.core.service.impl.OnlineUserRemind;
import com.javaniu.core.util.CookieUtil;
import com.javaniu.core.util.Security;
/**
*@author www.zuidaima.com
**/
public class UserInterceptor extends HandlerInterceptorAdapter {
@Autowired
public UserService userService;
@Autowired
public OnlineUserRemind onlineUserRemind;
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User user = (User) session
.getAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME);
if (user != null) {// 以db中user为准,以后需要refactor
User _user = userService.findOneById(user.getId());
if (_user.getStatus() != ModuleConstants.MODULE_STATUS_NORMAL) {// 让退出
session.removeAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME);
// 主动退出则删除cookie
Cookie cookie = CookieUtil.newLogoutCookie(user.getId());
response.addCookie(cookie);
response.sendRedirect("/user/login.htm");
return true;
}
// 从db中重新设置会变动属性
// login time不要copy
String name = _user.getName();
user.setName(name);
String avatarUrl = _user.getAvatarUrl();
user.setAvatarUrl(avatarUrl);
int niubi = _user.getNiubi();
user.setNiubi(niubi);
updateIp(user, request);
return true;
}
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.findLoginCookie(cookies);
if (cookie == null) {// 不强制登录
return true;
}
String descUId = cookie.getValue();
Long userId = Security.decryptUserId(descUId);
if (userId == null) {// 非法用户帐号
return true;
}
user = userService.findOneById(userId);
if (user == null) {// 非法用户帐号
return true;
}
if (user.getStatus() != ModuleConstants.MODULE_STATUS_NORMAL) {// 不正常的账号
return true;
}
updateIp(user, request);
// every ok
session.setAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME, user);
user.setUpdateTime(new Date());
userService.save(user);
return true;
}
private void updateIp(User user, HttpServletRequest request) {
String lastloginIp = getIpAddr(request);
String ip = null;
if (user.getExtend().containsKey(
ModuleConstants.USER_EXTEND_LASTLOGIN_IP)) {
ip = user.getExtend().getString(
ModuleConstants.USER_EXTEND_LASTLOGIN_IP);
}
if (lastloginIp != null) {
if (ip == null || !lastloginIp.equals(ip)) {
JSONObject extend = user.getExtend();
extend.put(ModuleConstants.USER_EXTEND_LASTLOGIN_IP,
lastloginIp);
user.setExtendJson(extend.toString());
userService.save(user);
}
}
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
HttpSession session = request.getSession();
User user = (User) session
.getAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME);
if (user == null) {
return;
}
user.setLoginTime(new Date());
List<ModuleDesc> remindDescs = onlineUserRemind.getRemindDescs(user);
session.setAttribute("remindDescs", remindDescs);
}
}
评论(2)
最佳答案
- 等 最代码怎么获取牛币啊?
- 完 谁来告诉我最代码上线的时间,答对者给5牛币,先来先得
- 等 牛友们,大家好,你们做程序员多久了?现在还好吗?
- 完 在微信打开的页面里进行app下载
- 等 最代码2014年欢乐聚声会
- 完 mysql如何查询表数据并且对3个字段降序的SQL?
- 完 最代码牛币机制改革
- 完 成功的在bae上使用了自定义运行环境 jetty+nginx的组合,大家对jetty+nginx优化有哪些心得?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 为什么java BufferedImage类处理大图直接抛出内存溢出的异常?
- 等 最代码是否开发手机app客户端?
- 完 java程序员学习哪些java的技术?java有哪些框架?都能做哪方面的开发?
- 等 php格式网页文件怎么运行?
- 等 Java volatile值获取的问题
- 等 前端vue,拦截了登录后台后,返回的token,requests拦截token,但是发送请求的时候,就出现跨越异常
- 等 大专本科计算机科班怎么找到Java工作?
- 等 eclipse怎么把三个java swing游戏项目合成一个项目?
- 完 伙伴们,大家都有什么好的解压方式么,分享一下~
- 完 三四线城市,6、7k,运维工作,索然无味,想去辞职上培训,各位牛牛有什么建议嘛
- 等 jsp页面输入中文变成问号
- 等 JPA在线上运行一段时间后报错Caused by: java.lang.IncompatibleClassChangeError: null
- 等 PHP 这个规则用preg_match_all怎么写
- 等 大佬们,有没有知道Alfresco如何配置LDAP登录呢?
- 等 php的install目录是框架带的吗?
相关问答
- 等 我去了美国工作,怎样可以发表我工作心情?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 最代码兑换物品,预定的牛牛请回答下
- 等 为什么最代码下载的文件都变成html文件了?
- 等 最代码网站下载的压缩包解压后为什么打不开?
- 等 最代码网址的访问速度还是挺快的,但是有时候界面出来前面一部分,为什么后面很多内容在加载延迟后出来?
- 等 最代码的列表图片是通过什么缩放的?
- 完 最代码定制Linux马克杯过来抢订了
- 等 看过来,最代码年底礼物兑换开始了,有需要的牛牛请回复需要那种颜色。
- 等 最代码想开发源码市场,不知道有多大潜力?
- 等 最代码上点赞狂人如何理解?
- 等 最代码源码采集的几个问题
最近浏览
是数据库 LV3
2021年2月6日
sadasdasdasdasda LV1
2018年10月29日
padorasword1 LV2
2018年3月9日
githongwei LV3
2017年12月9日
雷诺阿 LV10
2017年11月3日
15989221274 LV2
2017年10月25日
ONE源码 LV3
2017年10月18日
w341000 LV2
2017年6月13日
威威喵 LV2
2016年12月27日
mcy56885 LV1
2016年10月12日





