java 不拦截_请问最代码这种记住登录实现方式?java过滤器不拦截?

最代码的记住登陆机制是通过客户端cookie和服务端session实现的。

拦截器代码

UserInterceptor.javapackage 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 remindDescs = onlineUserRemind.getRemindDescs(user);

session.setAttribute("remindDescs", remindDescs);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值