`
chengyue2007
  • 浏览: 1470116 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

struts2.0拦截器(实现未登录的用户不能访问系统的页面)

阅读更多

1.要在struts.xml文件中添加下面的代码:

<package name="struts2" extends="struts-default">
    <!--自定义拦截器(没有登录的就返回到login)-->
        <interceptors>
            <interceptor name="sessionNull" class="com.hoperun.action.SessionNullInterceptor">
            </interceptor>
        </interceptors>
        <global-results>
            <result name="login" type="redirect">/sessionValid.jsp</result>
        </global-results
>

还要在具体action的跳转配置中添加下面代码:

<action name="orderSearch" class="com.hoperun.action.OrderSearchAction">
            <result name="success" >/orderSearch.jsp</result>
            <interceptor-ref name="sessionNull"></interceptor-ref>
               <interceptor-ref name="defaultStack"/>
        </action>

如果不加上面蓝色的部分,页面域中的值就不能带到下个页面,因为定义了自己的拦截器,系统传值的拦截器就失效了,所以加上这条系统默认的拦截器就生效了

2.下面是SessionNullInterceptor的拦截器具体代码:

package com.hoperun.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**
* session为空拦截器
*/
public class SessionNullInterceptor implements Interceptor {
private static final long serialVersionUID = 1L;

public void destroy() {
}

public void init() {
}

public String intercept(ActionInvocation invocation) throws Exception {
   HttpServletRequest req = ServletActionContext.getRequest();
   if (req.getSession().getAttribute("username") == null) {
    return Action.LOGIN;
   } else {
    return invocation.invoke();
   }
}

}

3,对了还不能忘记在login.acton中添加如下代码:

if(result==true)
        {
        Map<String,String> map = ActionContext.getContext().getSession();           
            map.put("username",username);
        
            return SUCCESS;
        }

这样如果你没有充login.jsp登录进来而直接去访问系统的其他页面时,就不能查看你想看的页面,而是会自动跳转到sessionValid.jsp页面去

分享到:
评论
2 楼 qhzq 2012-03-18  
我也在研究这个问题。
你的想法不错。
还可以声明一个package级别的默认拦截器栈,每个action就不用写那么多代码了,对吧。
你通过ActionContext.getContext().getSession()获得session,那么你想过,这样怎么做单元测试吗?如果脱离struts环境,ActionContext.getContext()得到的是null。
你应该让action实现sessionAware接口来获得session。
1 楼 zhangpeng1990 2011-12-10  
这样虽然可以阻止直接输入action地址防止非法登录,但是如果直接输入jsp地址还是不行啊?

相关推荐

    个人知识管理系统 Struts2.0 + Spring + Hibernate

    由于对页面样式了解不多,所以写出来的样式目前只在IE上运行良好,在火狐上效果不佳,并且在火狐上提示复习这一块一直出不来,目前也在研究CSS,希望能写出适合大多数浏览器的样式。 用户可建立自己的知识分类,...

    个人信息管理系统Struts2 spring hibernate dwr

    用户可建立自己的知识分类,对于私密信息(比喻日记等)可增加访问权限,只有登陆用户才能看到,非登陆用户只能浏览公开信息,以及增加新的信息,但无权修改以删除信息,用户权限拦截采用了Struts2的自定义拦截器 ...

    个人知识管理系统 Struts2 + Spring + Hibernate

    用户可建立自己的知识分类,对于私密信息(比喻日记等)可增加访问权限,只有登陆用户才能看到,非登陆用户只能浏览公开信息,以及增加新的信息,但无权修改以删除信息,用户权限拦截采用了Struts2的自定义拦截器 ...

    JAVA程序开发大全---上半部分

    12.4 Struts 2.0应用实例:登录系统 227 12.5 本章小结 231 第13章 JPA的开发与应用 232 13.1 JPA规范概述 232 13.2 MyEclipse创建基于JPA规范的项目 233 13.2.1 创建JPA项目 233 13.2.2 使用反向工程生成JPA实体类...

    struts2 标签库 帮助文档

    &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接,类似于html里的&lt;a&gt;&lt;/a&gt; 3. ...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342 8.12 本章小结 345 第9章 消息驱动EJB 346 9.1 JMS和EJB 347 9.1.1 为什么使用MDB ...

    《MyEclipse 6 Java 开发中文教程》前10章

    10.3.3 装配拦截器和Bean 212 10.3.4 测试和运行 214 10.3.5 AOP简介和相关概念 214 10.3.6 关于java.lang.ClassCastException: $Proxy0错误的解决方法 216 10.4 开发 Spring 2.0 AOP 应用 219 10.4.1 使用aop 标签...

    Spring in Action(第二版 中文高清版).part2

    11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中获取对象 12.1.1 使用传统的JNDI 12.1.2 注入JNDI对象 12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送...

    Spring in Action(第二版 中文高清版).part1

    11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中获取对象 12.1.1 使用传统的JNDI 12.1.2 注入JNDI对象 12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送...

    Spring in Action(第2版)中文版

    11.3.4使用注释声明拦截器 11.4小结 第12章访问企业服务 12.1从jndi中获取对象 12.1.1使用传统的jndi 12.1.2注入jndi对象 12.1.3在spring2中注入jndi对象 12.2发送电子邮件 12.2.1配置邮件发送器 12.2.2...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.5.3.1. RedirectView 13.5.3.2. redirect:前缀 13.5.3.3. forward:...

Global site tag (gtag.js) - Google Analytics