maskiris 2010-12-24 15:07
浏览 305
已采纳

用java+jsp,关于在线用户强制下线功能的问题

本人利用session.invalidate()方法去注销指定用户的session,但之后,由于用户浏览器有缓存,用户还可浏览一些页面,
系统在大部分jsp页面都含有session.getgetAttribute的操作!当用户继续对系统进行操作时(例如点击一些功能按钮跳转到其他页面),这就使得后台大量抛出空指针异常!原想在jsp页面加个判断session是否为null,但发现session不为null。这样所有含有session.getgetAttribute的jsp页面都通不过编译且抛出异常。请问有什么解决方法,或更好的实现此功能的方案。

  • 写回答

3条回答 默认 最新

  • hecheng_job 2010-12-25 11:03
    关注

    如果用struts2,可以实现他的拦截器

    用拦截器拦截所有ACTION请求或部分不拦截

    在方法体里实现就行了。

    [code="java"]
    package com.glf.oa.site.web;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;

    import org.apache.struts2.ServletActionContext;

    import com.glf.oa.site.business.BusinessAction;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

    public class AskControl extends AbstractInterceptor {
    private static final long serialVersionUID = 1L;

    public String intercept(ActionInvocation invocation) throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        String action = invocation.getAction().toString();
        String head = action.substring(16);
        int point = head.indexOf(".");
        String aName = head.substring(0, point);
    

    // System.out.println(aName);
    if (action.indexOf("com.glf.oa.site.login") < 0) {// 首先判断是否是登录界面
    if (session.getAttribute("nowUser") == null) {// 再判断用户session是否存在
    return "globalLogin";
    } else {// 如果存在
    // 再开始进行机构权限的判断
    int userId = Integer.parseInt(session.getAttribute("nowUser")
    .toString());
    BusinessAction b = new BusinessAction();
    if (b.checkOrganPower(aName, userId)) {
    return invocation.invoke();
    } else {
    return "error";
    }
    }
    } else {
    return invocation.invoke();
    }
    }
    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏