很常见的一个应用就是访问某个页面,因为权限不够,进入登陆页面。人性化的设计是能够在登陆之后,系统跳转到用户原本需要访问的页面。这可以借助拦截器来实现。

在我们验证用户登陆的拦截器里面获取请求地址,并存入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中实现登陆后跳转到登录前页面相关推荐

  1. Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】

    应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是 ...

  2. Spring Security——实现登录后跳转到登录前页面

    基本概念 暂无. 官方文档 https://docs.spring.io/spring-security/site/docs/5.3.1.BUILD-SNAPSHOT/reference/html5/ ...

  3. 利用Referer+URL参数 实现登录后自动跳回登录前页面

    登录后自动跳回登录前页面 原理: 利用Referer+URL参数实现 1:用户未登录,试图点击下载(下载前需要登录),点击Download时,发出的请求会带上Referer头 2: 重定向到登录页面时 ...

  4. java中登陆界面怎么连接到下一个界面啊_JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  5. JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  6. html登陆成功后跳转页面跳转,怎么设置登录成功后跳转到相应的页面

    想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...

  7. 登录成功后怎么跳转页面html,怎么设置登录成功后跳转到相应的页面

    想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...

  8. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

  9. struts2中用户登陆验证的常用方法

    一般我们在登陆验证窗口输入用户名或密码后,会将这些信息与数据库中的相关信息进行匹配,如何正确,就会返回到相应的页面,如果不正确,在登陆窗口会显示用户名或密码不正确的警告. struts2中的做法: 在 ...

  10. Django里自定义用户登陆及登陆后跳转到登陆前页面的实现

    因为下一步要和公司的UM帐号作集成,所以分离出登陆模块,及实现其基本功能是必不可少的. 登陆倒容易,但要实现在登陆后,跳转到登陆前的网页,且显示用户的登陆状态,花了点时间查找代码, 测试了五六种方式, ...

最新文章

  1. leetcode--Reverse Integer
  2. 数组-在Shell脚本中的基本使用介绍
  3. 学期计算机教学工作反思,信息技术组教学工作反思
  4. ssh配置文件ssh_config和sshd_config区别
  5. 游戏中的实时水体模拟技术分享:波形叠加法与波动方程
  6. dll文件:关于MFC程序不能定位输入点
  7. c语言字符串截取_笔记 | 自学Python 05:数据类型之字符串
  8. c语言求a1到an的和,C语言菜鸟基础教程之a++与++a
  9. 快速开平方取倒数的算法
  10. 计算机教师招聘试题(汇总集合版),计算机教师招聘试题(汇总集合版).doc
  11. (全程图解)Axure RP8.0安装、破解、汉化教程
  12. xml格式转json
  13. latex中自动生成参考文献
  14. wimlib-imagex.exe、DISM、WIMGAPI三种方式应用WIM的速度对比
  15. Elliptic Curve Cryptography: finite fields and discrete logarithms
  16. 数据分析方法:结构分析法
  17. 2018 android最新版本,2008年至2018年,Android系统10年进化史
  18. 【hihocoder】 Magic Box
  19. 【设计模式】享元(Flyweight)模式实例
  20. Java现有Word文档添加目录

热门文章

  1. IIS 如何用同一IP解析不同域名到同一服务器
  2. VMware ESX的性能如何与Hyper-V的价格进行竞争?
  3. smart link和聚合链路综合实验
  4. python定义输入变量_Python 2 声明变量 输入输出 练习
  5. gps导航计算机毕业设计开题报告,GPS导航计算机毕业设计开题报告.doc
  6. redis bigkey 删除问题
  7. 【渝粤教育】国家开放大学2018年秋季 0553-22T色彩 参考试题
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
  9. [渝粤教育] 西南科技大学 机床电气控制技术 在线考试复习资料
  10. 23种设计模式(十八)状态变化之备忘录