我是靠谱客的博主 痴情小懒猪,最近开发中收集的这篇文章主要介绍通过Struts2拦截器实现Session失效后自动跳转到登录页面逻辑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Session的默认失效时间是30分钟。当系统空置时长超过30分钟时,如果未做对应的处理,访问出错。在这里的处理是,当Session失效之后,用户再次访问的时,自动跳转到登录页面。

参考文章:

《Struts2自定义拦截器实例-登录权限验证》--https://blog.csdn.net/java_cxrs/article/details/5514340

《Struts2自定义拦截器实例-Session超时的处理》--https://blog.csdn.net/java_cxrs/article/details/5519743

  --Login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet" type="text/css" href="css/common.css">
<script src="js/jquery-3.2.1.js"></script>
<script src="js/jquery.validate.js"></script>
<!--从iframe中跳转-->
<script type="text/javascript">
if (window != top){
top.location.href = location.href;
}
</script>
</head>
<body style="background-color:#003d79">
<s:form id="loginFrom" theme="simple" method="post" action="login">
<div id="loginDiv">
<div style="padding-top: 30px;">
<s:textfield id="username" name ="user.username" placeholder="请输入用户名" class="loginTextfield"/>
</div>
<div style="padding-top: 30px;">
<s:password id="password" name="user.password" placeholder="请输入密码" class="loginTextfield"/>
</div>
<div style="padding-top: 20px;">
<s:submit class="loginBtnStyle" value="登
录"/>
</div>
</div>
</s:form>
</body>
</html>

--LoginAction

package action;
import bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import common.CommonParam;
import service.LoginService;
import serviceImpl.LoginServiceImpl;
import java.util.Map;
public class LoginAction extends ActionSupport{
//定义User对象
private User user;
//定义loginService对象
private LoginService loginService;
/**
* 登录验证
* @return String
*/
public String userLogin(){
String result = "";
//定义用户列表
User loginUser = new User();
loginUser = loginService.getUserByUserName(user);
if(loginUser != null) {
if (user.getUsername().equals(loginUser.getUsername())) {
if (user.getPassword().equals(loginUser.getPassword())) {
//如果用户名和密码一致
if (loginUser.getIsDelete() == CommonParam.USER_ENABLE) {
//获取session
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
//保存信息到session
session.put("userId", loginUser.getUserId());
session.put("userName", loginUser.getUsername());
session.put("userRole", loginUser.getRoleId());
result = SUCCESS;
return result;
} else {
addFieldError("loginFail", "用户已禁用,请联系管理员");
result = "failure";
return result;
}
} else {
addFieldError("loginFail", "用户名和密码不对应,请检查");
result = "failure";
return result;
}
}
}else {
addFieldError("loginFail", "该用户不存在,请联系管理员");
result = "failure";
return result;
}
return result;
}
/**---------------------------getter and setter-------------------------*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public LoginService getLoginService() {
return loginService;
}
public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}
}

--自定义过滤器类

package common;
import action.LoginAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.Action;
import java.util.Map;
public class MySessionInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation ai) throws Exception {
//获取上下文
ActionContext context = ai.getInvocationContext();
//获取session
Map session = context.getSession();
//获取action
Action action =(Action)ai.getAction();
        //如果是登录
if(action instanceof LoginAction){
return ai.invoke();
}
        //获取session中的userName的值
String username = (String)session.get("userName");
        
if(username == null){
return Action.LOGIN;
//return "login"
}else {
return
ai.invoke();
}
}
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
<include file="struts-default.xml"></include>
<package name="default" extends="struts-default,json-default">
<!--定义一个拦截器-->
<interceptors>
<interceptor name="sessionOut" class="common.MySessionInterceptor"/>
<!--拦截器栈-->
<interceptor-stack name="myInterceptor">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="sessionOut"/>
</interceptor-stack>
</interceptors>
<!--定义全局result-->
<global-results>
<result name="login">/Login.jsp</result>
</global-results>
<!--登录相关action-->
<action name="login" class="action.LoginAction" method="userLogin">
<result name="success" type="redirect">/jsp/homePage.jsp</result>
<result name="failure">/Login.jsp</result>
</action>
<!--角色相关action-->
<!--获取角色列表数据-->
<action name="role" class="action.RoleAction" method="getRoleList">
<result name="success">/jsp/roleList.jsp</result>
<result name="failure">/jsp/roleList.jsp</result>
<interceptor-ref name="myInterceptor"/>
</action>
<!--添加角色-->
<action name="addRole" class="action.RoleAction" method="addRole">
<result name="success" type="redirect">role.action</result>
<result name="failure">/jsp/error.jsp</result>
<result name="input">/jsp/addRole.jsp</result>
<interceptor-ref name="myInterceptor"/>
</action>
</package>
</struts>

最后

以上就是痴情小懒猪为你收集整理的通过Struts2拦截器实现Session失效后自动跳转到登录页面逻辑的全部内容,希望文章能够帮你解决通过Struts2拦截器实现Session失效后自动跳转到登录页面逻辑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部