📄 usersessioninterceptor.java
字号:
package com.laoer.bbscs.web.interceptor;
import net.sf.struts.saif.ActionHaveForwardInterceptor;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import javax.servlet.ServletException;
import org.springframework.web.context.WebApplicationContext;
import javax.servlet.http.HttpSession;
import com.laoer.bbscs.service.config.SysConfig;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.laoer.bbscs.comm.Constant;
import com.laoer.bbscs.service.UserOnlineService;
import com.laoer.bbscs.service.UserService;
import com.laoer.bbscs.bean.UserOnline;
import com.laoer.bbscs.exception.*;
import java.util.Map;
import com.laoer.bbscs.web.action.ActionUtils;
import com.laoer.bbscs.web.servlet.UserCookie;
import com.laoer.bbscs.web.servlet.UserSession;
import com.laoer.bbscs.bean.UserInfo;
import java.util.Date;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import com.laoer.bbscs.bean.UserDetail;
import com.laoer.comm.util.Util;
import java.util.Locale;
import com.laoer.bbscs.comm.IPSeeker;
import com.laoer.bbscs.service.SysStatService;
/**
* <p>Title: Tianyi BBS</p>
*
* <p>Description: BBSCS</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: Laoer.com</p>
*
* @author Gong Tianyi
* @version 7.0
*/
public class UserSessionInterceptor
implements ActionHaveForwardInterceptor {
private static final Log logger = LogFactory.getLog(UserSessionInterceptor.class);
public UserSessionInterceptor() {
}
/**
* beforeAction
*
* @param action Action
* @param actionMapping ActionMapping
* @param actionForm ActionForm
* @param httpServletRequest HttpServletRequest
* @param httpServletResponse HttpServletResponse
* @return ActionForward
* @throws IOException
* @throws ServletException
* @todo Implement this net.sf.struts.saif.ActionHaveForwardInterceptor method
*/
public ActionForward beforeAction(Action action, ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws IOException,
ServletException {
HttpSession session = httpServletRequest.getSession();
WebApplicationContext wc = WebApplicationContextUtils.getWebApplicationContext(action.
getServlet().getServletContext());
SysConfig sysConfig = (SysConfig) wc.getBean("sysConfig");
/*
if (!sysConfig.isOpen()) {
httpServletRequest.setAttribute("closeReson", sysConfig.getCloseReson());
return actionMapping.findForward("sysClosed");
}*/
if (sysConfig.isUsePass()) {
UserCookie uc = new UserCookie(httpServletRequest, httpServletResponse, sysConfig);
if (uc.isLoginPass()) { //通行证已登录
boolean isNewUser = false;
UserService userService = (UserService) wc.getBean("userService");
UserOnlineService userOnlineService = (UserOnlineService) wc.getBean("userOnlineService");
UserSession us = (UserSession) session.getAttribute(Constant.USER_SESSION_KEY); //取用户Session信息
if (us == null) { //如果没有Session信息
UserInfo ui = userService.findUserInfoByUserName(uc.getPusername());
if (ui != null) { //用户存在,登录
ui.setLastLoginIP(ui.getLoginIP());
ui.setLastLoginTime(ui.getLoginTime());
ui.setLoginIP(httpServletRequest.getRemoteAddr());
ui.setLoginTime(new Date());
ui.setUserLocale(httpServletRequest.getLocale().toString());
long nowTime = System.currentTimeMillis();
UserOnline uo = new UserOnline();
uo.setAtPlace("");
uo.setBoardID(0);
uo.setNickName(ui.getNickName());
uo.setOnlineTime(nowTime);
uo.setUserGroupID(ui.getGroupID());
uo.setUserID(ui.getId());
uo.setUserName(ui.getUserName());
uo.setValidateCode(ui.getId() + "_" + nowTime);
if (ui.getHiddenLogin() == 1) { //用户隐身登录
uo.setHiddenUser(1);
}
try {
ui = userService.saveAtLogin(ui); //用户登录处理
userService.writeUserFile(ui); //写用户个人文件
uo = userOnlineService.createUserOnline(uo); //加入在线用户表
}
catch (BbscsException ex) {
logger.error(ex);
}
Map[] pmap = userService.getUserPermission(ui);
ActionUtils.createUserSession(httpServletRequest, ui, pmap, uo);
uc.addCookies(ui, -1);
}
else { //用户不存在,是新用户
isNewUser = true;
}
}
else { //有Session信息
if (!us.getUserName().equals(uc.getPusername())) { //用户Session中的用户名和Cookie中的用户名不一致
UserInfo ui = userService.findUserInfoByUserName(uc.getPusername());
if (ui != null) { //用户存在,重新登录
session.removeAttribute(Constant.USER_SESSION_KEY);
ui.setLastLoginIP(ui.getLoginIP());
ui.setLastLoginTime(ui.getLoginTime());
ui.setLoginIP(httpServletRequest.getRemoteAddr());
ui.setLoginTime(new Date());
ui.setUserLocale(httpServletRequest.getLocale().toString());
long nowTime = System.currentTimeMillis();
UserOnline uo = new UserOnline();
uo.setAtPlace("");
uo.setBoardID(0);
uo.setNickName(ui.getNickName());
uo.setOnlineTime(nowTime);
uo.setUserGroupID(ui.getGroupID());
uo.setUserID(ui.getId());
uo.setUserName(ui.getUserName());
uo.setValidateCode(ui.getId() + "_" + nowTime);
if (ui.getHiddenLogin() == 1) { //用户隐身登录
uo.setHiddenUser(1);
}
try {
ui = userService.saveAtLogin(ui); //用户登录处理
userService.writeUserFile(ui); //写用户个人文件
uo = userOnlineService.createUserOnline(uo); //加入在线用户表
}
catch (BbscsException ex) {
logger.error(ex);
}
Map[] pmap = userService.getUserPermission(ui);
ActionUtils.createUserSession(httpServletRequest, ui, pmap, uo);
uc.addCookies(ui, -1);
}
else { //用户不存在,是新用户
isNewUser = true;
}
}
} //Session判断结束
if (isNewUser) { //创建社区用户
Locale locale = httpServletRequest.getLocale();
IPSeeker ipSeeker = (IPSeeker) wc.getBean("ipSeeker");
UserInfo ui = new UserInfo();
ui.setAcceptFriend(1);
ui.setAnswer("Answer");
ui.setArticleEliteNum(0);
ui.setArticleNum(0);
ui.setBirthDay(1);
ui.setBirthMonth(1);
ui.setBirthYear(1980);
ui.setEmail(uc.getPusername() + "@");
ui.setExperience(0);
ui.setForumPerNum(0);
ui.setForumViewMode(0);
ui.setHavePic(0);
ui.setLastLoginIP("");
ui.setLastLoginTime(new Date());
ui.setLifeForce(0);
ui.setLiterary(0);
ui.setLoginIP("");
ui.setLoginTime(new Date());
ui.setLoginTimes(1);
ui.setNickName(sysConfig.bestrowScreenNickName(uc.getPusername()));
ui.setPasswd("1234");
ui.setPicFileName("");
ui.setPostPerNum(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -