`

在Struts2中实现登陆后跳转到登录前页面【转】

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

//在我们验证用户登陆的拦截器里面获取请求地址,并存入session。[/color]
package com.tuanplus.interceptor;
 
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
 
/**
 * 验证用户登陆
 * 
 * @author MZULE
 * 
 */
public class UserLoginInterceptor implements Interceptor {
 
    private static final long serialVersionUID = 1593745236481514166L;
 
    public void destroy() {
    }
 
    public void init() {
    }
 
    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext context = invocation.getInvocationContext();
        // 获取session
        Map<String, Object> session = context.getSession();
        Object user = session.get("user");
        // 用户还未登陆
        if (user == null) {
            // 获取HttpServletRequest对象
            HttpServletRequest req = ServletActionContext.getRequest();
            // 获取此请求的地址,请求地址包含application name,进行subString操作,去除application name
            String path = req.getRequestURI().substring(10);
            // 获得请求中的参数
            String queryString = req.getQueryString();
            // 预防空指针
            if (queryString == null) {
                queryString = "";
            }
            // 拼凑得到登陆之前的地址
            String realPath = path + "?" + queryString;
            // 存入session,方便调用
            session.put("prePage", realPath);
            return "login";
        }
        // 用户已经登陆,放行
        return invocation.invoke();
    }
 
}
//在用户登陆的action中加入字符串类型的prePage属性,用来存储拦截器放入session////的//prePage值(即登陆前的请求地址)。
?
package com.tuanplus.action;
 
import com.tuanplus.po.User;
import com.tuanplus.service.IUserService;
import com.tuanplus.util.AuthCodeUtil;
 
/**
 * 登陆Action
 * 
 * @author MZULE
 * 
 */
public class LoginAction extends BaseAction {
 
    private static final long serialVersionUID = -6179170126070438432L;
    private IUserService userService;
    private User user;
    //验证码
    private String auth;
    //登录前页面
    private String prePage;
 
    public String execute() {
        // 获取登陆的User对象
        User seuser = userService.get(user.getEmail());
        // 加入session
        session.put("user", seuser);
        //获取跳转到登陆界面之前的页面地址,由拦截器提供
        prePage = (String) session.get("prePage");
        //清除session中的数据
        session.remove("prePage");
        if (prePage == null) {
            //不是拦截器跳转到登陆页面的,直接访问的登陆页面
            return "myorder";
        } else {
            return SUCCESS;
        }
    }
  //  ...
}
//在struts.xml中配置使用action的属性prePage决定物理视图资源。
//?
<!-- 登陆 -->
<action name="login" class="loginAction">
    <result type="redirectAction">${prePage}</result>
    <result name="myorder" type="redirectAction">myOrder</result>
    <result name="input">/login.jsp</result>
</action>



原文出处:http://www.cnblogs.com/codeplus/archive/2011/08/09/2132248.html
分享到:
评论

相关推荐

    struts2如何实现弹出action返回的错误信息

    struts2如何实现弹出action返回的错误信息

    dwz框架实现拦截器 session超时跳转登陆页面

    dwz框架实现拦截器 session超时跳转登陆页面 DWZ框架 struts2拦截器 session超时

    struts2注解登陆

    注解实现的页面跳转其特点是不用配置文件struts.xml因而可以实现零配置,同时由于有注解的功能,所以说大大增加了程序的可维护性。

    struts2拦截器

    利用struts2拦截器实现对登录功能的拦截,如果没有登录就进入其它页面,则会跳转到登陆页面,提醒先登录。同时还涉及log4j的应用与连接Oracle数据库

    利用struts2框架,实验简单的聊天室功能.zip

    1.登陆成功,直接跳转到default.jsp页面 2.相同的用户名只能登陆一次 3.default.jsp为聊天室页面,页面显示当前在线的用户名称和在线人数,以及实时的聊天内容。每一个用户可独立发送信息,互不干扰。用户列表与...

    利用struts2框架,实验简单的聊天室功能

    1.登陆成功,直接跳转到default.jsp页面 2.相同的用户名只能登陆一次 3.default.jsp为聊天室页面,页面显示当前在线的用户名称和在线人数,以及实时的聊天内容。每一个用户可独立发送信息,互不干扰。用户列表与聊天...

    saveWords.zip

    1.登陆成功,直接跳转到default.jsp页面;失败时,跳回login.jsp页面 2.default.jsp为聊天室页面,页面显示当前在线的用户名称和在线人数,以及实时的聊天内容。用户列表与聊天内容的显示格式遵照下图所示。聊天...

    MF00617-JAVA餐厅点餐管理源码.zip

    登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象信息,在action中返回json字符串,并在登陆jsp中判断用户权限实现跳转不用页面。登陆jsp采用jquery.cooki.js脚本在项目根目录下生成cookie,用来...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...

    java login登陆程序

    实现login登陆,输入用户名和密码,输入正确,页面跳转welcome.jsp页面。输入错误,重新输入。程序包含Location.java、login.jsp、welcome.jsp、web.xml 、struts.xml文件。一个简易实用的程序。

    基于J2EE框架的个人博客系统项目毕业设计论...

    因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...

    ssh框架实现通讯录

    基于struts1.2+spring2.0+hibernate3.1框架 基本功能: 注册,登陆,添加联系人,按类别查找联系人,删除联系人,登出 表单输入使用validate框架验证,权限管理使用 Filter+action拦截器,页面自动刷新跳转...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    29、修复了后台操作中如果 session 过期重新登陆后出现循环跳转 30、修复了恶意访问后台权限判断,个人签名过滤恶意html代码的问题 31、修复了全文检索不精确 32、修复了如果域名中多一个"/"符,后台表情搜索失效...

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    29、修复了后台操作中如果 session 过期重新登陆后出现循环跳转 30、修复了恶意访问后台权限判断,个人签名过滤恶意html代码的问题 31、修复了全文检索不精确 32、修复了如果域名中多一个"/"符,后台表情搜索失效...

    李兴华Java Web开发实战经典(高清版) Part2

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

    java web 视频、电子书、源码(李兴华老师出版)

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象...

Global site tag (gtag.js) - Google Analytics