在Struts2中实现登陆后跳转到登录前页面
很常见的一个应用就是访问某个页面,因为权限不够,进入登陆页面。人性化的设计是能够在登陆之后,系统跳转到用户原本需要访问的页面。这可以借助拦截器来实现。
在我们验证用户登陆的拦截器里面获取请求地址,并存入session。
1 package com.tuanplus.interceptor; 2 3 import java.util.Map; 4 import javax.servlet.http.HttpServletRequest; 5 import org.apache.struts2.ServletActionContext; 6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.ActionInvocation; 8 import com.opensymphony.xwork2.interceptor.Interceptor; 9 10 /** 11 * 验证用户登陆 12 * 13 * @author MZULE 14 * 15 */ 16 public class UserLoginInterceptor implements Interceptor { 17 18 private static final long serialVersionUID = 1593745236481514166L; 19 20 public void destroy() { 21 } 22 23 public void init() { 24 } 25 26 public String intercept(ActionInvocation invocation) throws Exception { 27 ActionContext context = invocation.getInvocationContext(); 28 // 获取session 29 Map<String, Object> session = context.getSession(); 30 Object user = session.get("user"); 31 // 用户还未登陆 32 if (user == null) { 33 // 获取HttpServletRequest对象 34 HttpServletRequest req = ServletActionContext.getRequest(); 35 // 获取此请求的地址,请求地址包含application name,进行subString操作,去除application name 36 String path = req.getRequestURI().substring(10); 37 // 获得请求中的参数 38 String queryString = req.getQueryString(); 39 // 预防空指针 40 if (queryString == null) { 41 queryString = ""; 42 } 43 // 拼凑得到登陆之前的地址 44 String realPath = path + "?" + queryString; 45 // 存入session,方便调用 46 session.put("prePage", realPath); 47 return "login"; 48 } 49 // 用户已经登陆,放行 50 return invocation.invoke(); 51 } 52 53 }
在用户登陆的action中加入字符串类型的prePage属性,用来存储拦截器放入session的prePage值(即登陆前的请求地址)。
1 package com.tuanplus.action; 2 3 import com.tuanplus.po.User; 4 import com.tuanplus.service.IUserService; 5 import com.tuanplus.util.AuthCodeUtil; 6 7 /** 8 * 登陆Action 9 * 10 * @author MZULE 11 * 12 */ 13 public class LoginAction extends BaseAction { 14 15 private static final long serialVersionUID = -6179170126070438432L; 16 private IUserService userService; 17 private User user; 18 //验证码 19 private String auth; 20 //登录前页面 21 private String prePage; 22 23 public String execute() { 24 // 获取登陆的User对象 25 User seuser = userService.get(user.getEmail()); 26 // 加入session 27 session.put("user", seuser); 28 //获取跳转到登陆界面之前的页面地址,由拦截器提供 29 prePage = (String) session.get("prePage"); 30 //清除session中的数据 31 session.remove("prePage"); 32 if (prePage == null) { 33 //不是拦截器跳转到登陆页面的,直接访问的登陆页面 34 return "myorder"; 35 } else { 36 return SUCCESS; 37 } 38 } 39 ... 40 }
在struts.xml中配置使用action的属性prePage决定物理视图资源。
1 ... 2 <!-- 登陆 --> 3 <action name="login" class="loginAction"> 4 <result type="redirectAction">${prePage}</result> 5 <result name="myorder" type="redirectAction">myOrder</result> 6 <result name="input">/login.jsp</result> 7 </action> 8 ...
转载于:https://www.cnblogs.com/kxxiang/p/3984372.html
在Struts2中实现登陆后跳转到登录前页面相关推荐
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是 ...
- Spring Security——实现登录后跳转到登录前页面
基本概念 暂无. 官方文档 https://docs.spring.io/spring-security/site/docs/5.3.1.BUILD-SNAPSHOT/reference/html5/ ...
- 利用Referer+URL参数 实现登录后自动跳回登录前页面
登录后自动跳回登录前页面 原理: 利用Referer+URL参数实现 1:用户未登录,试图点击下载(下载前需要登录),点击Download时,发出的请求会带上Referer头 2: 重定向到登录页面时 ...
- java中登陆界面怎么连接到下一个界面啊_JavaWeb登陆成功后跳转到上一个页面
JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...
- JavaWeb登陆成功后跳转到上一个页面
JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...
- html登陆成功后跳转页面跳转,怎么设置登录成功后跳转到相应的页面
想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...
- 登录成功后怎么跳转页面html,怎么设置登录成功后跳转到相应的页面
想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...
- 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)
二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序) 之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...
- struts2中用户登陆验证的常用方法
一般我们在登陆验证窗口输入用户名或密码后,会将这些信息与数据库中的相关信息进行匹配,如何正确,就会返回到相应的页面,如果不正确,在登陆窗口会显示用户名或密码不正确的警告. struts2中的做法: 在 ...
- Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
因为下一步要和公司的UM帐号作集成,所以分离出登陆模块,及实现其基本功能是必不可少的. 登陆倒容易,但要实现在登陆后,跳转到登陆前的网页,且显示用户的登陆状态,花了点时间查找代码, 测试了五六种方式, ...
最新文章
- leetcode--Reverse Integer
- 数组-在Shell脚本中的基本使用介绍
- 学期计算机教学工作反思,信息技术组教学工作反思
- ssh配置文件ssh_config和sshd_config区别
- 游戏中的实时水体模拟技术分享:波形叠加法与波动方程
- dll文件:关于MFC程序不能定位输入点
- c语言字符串截取_笔记 | 自学Python 05:数据类型之字符串
- c语言求a1到an的和,C语言菜鸟基础教程之a++与++a
- 快速开平方取倒数的算法
- 计算机教师招聘试题(汇总集合版),计算机教师招聘试题(汇总集合版).doc
- (全程图解)Axure RP8.0安装、破解、汉化教程
- xml格式转json
- latex中自动生成参考文献
- wimlib-imagex.exe、DISM、WIMGAPI三种方式应用WIM的速度对比
- Elliptic Curve Cryptography: finite fields and discrete logarithms
- 数据分析方法:结构分析法
- 2018 android最新版本,2008年至2018年,Android系统10年进化史
- 【hihocoder】 Magic Box
- 【设计模式】享元(Flyweight)模式实例
- Java现有Word文档添加目录
热门文章
- IIS 如何用同一IP解析不同域名到同一服务器
- VMware ESX的性能如何与Hyper-V的价格进行竞争?
- smart link和聚合链路综合实验
- python定义输入变量_Python 2 声明变量 输入输出 练习
- gps导航计算机毕业设计开题报告,GPS导航计算机毕业设计开题报告.doc
- redis bigkey 删除问题
- 【渝粤教育】国家开放大学2018年秋季 0553-22T色彩 参考试题
- [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
- [渝粤教育] 西南科技大学 机床电气控制技术 在线考试复习资料
- 23种设计模式(十八)状态变化之备忘录