SSH 单用户登录功能

来源:互联网 发布:淘宝助理4.7下载 编辑:程序博客网 时间:2024/05/03 22:32

用个HashMap来记录在线用户,使用struts2的过滤器来判断是不是最后登录的用户(只允许最后登录的用户进行操作),是则放行,不是则跳到登陆界面。


pojo类:

public class User {private String user;private String pass;public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}}

在线用户类:

import java.util.HashMap;import java.util.Map;public class OnLineUser {private static Map<String,String> users = new HashMap<String,String>();public static void putUser(String user, String sessionId) {users.put(user, sessionId);}public static boolean isMyLogin(String user, String sessionId) {String _sessionId = users.get(user);if (_sessionId != null && _sessionId.equals(sessionId)) {return true;}return false;}public static boolean removeUser(String user, String sessionId) {String _sessionId = users.get(user);if (_sessionId.equals(sessionId)) {users.remove(user);return true;}return false;}}

过滤器(检查是否登录,以及是否是最后登录此帐号的用户):

package com.action.Interceptor;import java.util.Map;import org.apache.struts2.ServletActionContext;import com.action.UserAction;import com.bean.User;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.tools.OnLineUser;public class OneUserLoginInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stubMap session = invocation.getInvocationContext().getSession();User user = (User) session.get("userInfo");String actionName = invocation.getInvocationContext().getName();if ("login".equals(actionName) || "logout".equals(actionName)) {// 如果是login或logout则放行return invocation.invoke();} else {if (s_toperator != null) {if (OnLineUser.isMyLogin(user.getUser(), ServletActionContext.getRequest().getSession().getId())) {// 该user的sessionId没有变过,是该用户最后登录的用户return invocation.invoke();}// 如果sessionId已经改变过,则表示该用户在别处登录过(只允许最后登录的在线)session.remove("userInfo");UserAction userAction = (UserAction) invocation.getAction();userAction.addFieldError("user", "抱歉,您的帐号已在别处登录");return "toLogin";}UserAction userAction = (UserAction) invocation.getAction();userAction.addFieldError("user", "抱歉,登录超时");return "toLogin";}}}

struts2 action:

package com.action;import org.apache.struts2.ServletActionContext;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.bean.User;import com.opensymphony.xwork2.ModelDriven;import com.service.UserService;import com.tools.Encrypt;import com.tools.OnLineUser;@Controller("userAction")@Scope("prototype")public class UserAction extends BaseAction implements ModelDriven {@Autowiredprivate UserService userService;private User user = new User();public String login() {// MD5加密,如果不需要请忽略String md5UserPass = Encrypt.encodeMD5(toperator.getUser(),toperator.getPass());if (md5UserPass == null) {this.addFieldError("user", "请输入用户名和密码");} else {User db_user = userService.login(User.getUser(), md5UserPass);if (db_user != null) {session.put("userInfo", db_user);// 记录当前用户的 sessionIdOnLineUser.putUser(db_user.getUser(), ServletActionContext.getRequest().getSession().getId());return "login_success";}this.addFieldError("user", "用户名或密码错误");}return "toLogin";}public String logout() {User s_user = (User) session.get("userInfo");if (s_user != null) {OnLineUser.removeUser(s_user.getUser(), ServletActionContext.getRequest().getSession().getId());session.remove("userInfo");}return "toLogin";}public String test() {return "isLogin";}public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic User getModel() {// TODO Auto-generated method stubreturn this.user;}}

struts配置文件:

<span style="white-space:pre"></span><package name="default" namespace="/" extends="json-default"><interceptors><interceptor name="onUserLoginInterceptor" class="com.action.Interceptor.OneUserLoginInterceptor"></interceptor><interceptor name="authInterceptor" class="com.action.Interceptor.AuthInterceptor"></interceptor><interceptor-stack name="onUserLogin"><interceptor-ref name="onUserLoginInterceptor" /><interceptor-ref name="authInterceptor"></interceptor-ref><interceptor-ref name="defaultStack" /></interceptor-stack></interceptors><global-results><result name="toLogin"><param name="namespace">/</param><param name="location">/index.jsp</param></result></global-results></package>

<span style="white-space:pre"></span><package name="user" namespace="/user" extends="default"><action name="*" class="userAction" method="{1}"><interceptor-ref name="onUserLogin" /> <result name="login_success">/WEB-INF/pages/main.jsp</result> <result name="input">/debug.jsp</result><result name="isLogin">/WEB-INF/pages/main.jsp</result></action></package>


0 0