`
SoldierBandit
  • 浏览: 835 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JSF+hibernate的系统中,Filter的问题,给点建议吧!

阅读更多
public class AuthenticateFilter implements Filter {
private static Logger logger = Logger.getLogger(AuthenticateFilter.class);

    private ServletContext context = null;

    public AuthenticateFilter() {
        super();
    }

    public void init(FilterConfig arg0) throws ServletException {
        context = arg0.getServletContext();

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filterChain) throws IOException, ServletException {

        if (request instanceof HttpServletRequest) {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpSession session = req.getSession(true);
           
//            logger.debug("Request Path Info:" + req.getPathInfo());
//            logger.debug("Request URI:" + req.getRequestURI());
//            logger.debug("Request URL:" + req.getRequestURL());
//            logger.debug("Session ID : " + session.getId());
           
            User user = (User) session.getAttribute("user");

            logger.debug("doFilter QS : " + req.getQueryString());
            //logger.debug("user is null:" + user);
            if (user != null) {
            boolean canAccess = false;
        try {
        Map parameters = new HashMap();
       
        Enumeration names = request.getParameterNames();
        String name = null;
        String value = null;
                while (names.hasMoreElements()) {
                name = (String) names.nextElement();
                value = request.getParameter(name);
                   
                parameters.put(name, value);
                }

//                logger.debug("OP: " + parameters.get("op"));
        canAccess = AccessControlService.getInstance().canAccess(user, parameters);
        } catch (ServiceException sx) {
        logger.error(sx.getMessage(), sx);
        }
       
        if(canAccess) { // can access
        filterChain.doFilter(request, response);       
        } else { // can't access
        clearSession(req);
        logger.debug("doFilter user is null forward(accessDenied.html):" + user);
                    request.getRequestDispatcher("/accessDenied.html").forward(request, response);                     
        }
        logger.debug("user:"+ user.getName());
            } else {
            String operation = req.getParameter("op");
            //logger.debug("user:"+ user.getName());
            logger.debug("doFilter OP : " + operation);
            logger.debug("URI: " + req.getRequestURI());
            logger.debug("URL: " + req.getRequestURL());
//            logger.debug("QS : " + req.getQueryString());
if (operation != null && operation.equals("approval")) {
String templateId = req.getParameter("templateId");
String applicationId = req.getParameter("applicationId");
logger.debug("Template ID   : " + templateId);
logger.debug("Application ID: " + applicationId);
session.setAttribute("approval", req.getRequestURL().toString() + "?op=approval");
session.setAttribute("templateId", templateId);
session.setAttribute("applicationId", applicationId);
logger.debug("doFilter user is null operation is not null::" + user);
request.getRequestDispatcher("/filterError.html").forward(request, response);
}else {
logger.debug("doFilter user is null operation is  null ::" + user);
clearSession(req);
request.getRequestDispatcher("/filterError.html").forward(request, response);
}
            }           
           
        }

    }

    public void destroy() {
    }
   
    private void clearSession(HttpServletRequest request) {
        Enumeration names = request.getSession().getAttributeNames();
        while (names.hasMoreElements()) {
            request.getSession().removeAttribute((String) names.nextElement());           
        }
        request.getSession().invalidate();
    }
}

经过第一次过滤的时候,session里存储的值,都能正常读出,但是在第二次过滤时,就会将session中的存储的登陆用户信息清空,第一次过滤是main.jsp加载的时候,第二次是当点击main.jsp页面上一个按钮时,弹出新窗口后就清空掉session里的用户信息值,导致后面的页面从session中读值全是空的,直接跳转回登陆页面。
问题就在为什么二次过滤时,会把session中存储的用户信息过滤掉,我将过滤器的配置文件更改后,不过滤点击按钮弹出的页面,程序就正常了。但是该系统是用到两个不同的登陆名进去,1进入后有四个权限角色,2进入后只有两个权限角色,1进入系统后,过滤器即使是二次过滤也不会把session里存储的用户信息清空,但是2进入后,二次过滤就把session里存储的用户信息清空掉了。
PS:过滤器过滤时,弹出一个新窗口,是否会因为过滤器把请求连接的URL地址清空?
分享到:
评论
3 楼 SoldierBandit 2008-04-11  
哎!没办法了,没人给点实际点的意见,我把filter配置文件过滤的部分页面删除掉了。不执行过滤功能,然后程序跑起来没问题。
2 楼 SoldierBandit 2008-04-09  
如果不加过滤器,我的session里的值在新窗口可以获取到,但是加上过滤器后,第一次加载新窗口可以正确输出,但点击新窗口里的提交按纽后,先经过过滤器,就在这时,过滤器把session里的用户信息清空了。恼火就在这里,网上大部分的过滤器例子都是针对转码问题。但是我们是外资公司,所有的东西都是全英文环境,不涉及到转码,系统中的过滤器也只是起到一个登陆用户信息是否为空的判断,然后就转给servlet处理了。怪就怪在第一次判断session中的用户信息,全有值,但是第二次过滤时,就变的没有值了,就执行else里的语句去了,但是在配置文件中将这个过滤器的指定过滤页面删除掉,就不报错了!
1 楼 lisahyes 2008-04-09  
弹出新窗口确实有可能引起session数据的丢失,请楼主搜索 "新窗口 session",会找到线索

相关推荐

    Struts+JSF+filter+Myfaces+A4j+Spring+hibernate+Mysql整合一个项目

    例如,Struts处理用户请求,JSF和Myfaces构建用户界面,Spring管理对象和事务,Hibernate负责数据持久化,而Filter则在请求进入系统前进行预处理。MySQL则作为所有数据的存储库,通过Hibernate的ORM机制与Java对象...

    jsf2(primefaces3)+spring+hibernate案例下载

    这是一个基于Java技术栈的Web应用开发案例,使用了JSF2、PrimeFaces 3、Spring和Hibernate这四个关键组件。让我们逐一深入理解这些技术及其在项目中的作用。 **JSF2 (JavaServer Faces 2)** 是一个用于构建用户界面...

    myeclipse7.0整合spring2.5+hibernate3.2+jsf(myfaces)

    不过,需要注意的是,项目中可能存在未清理的冗余jar包,为避免潜在问题,建议根据具体需求精简jar包列表。此外,随着技术的发展,当前版本可能已过时,可以考虑升级到更现代的框架版本,如Spring Boot和Hibernate ...

    java javaee struts2 spring hibernate免费学习视频教程

    根据提供的标题、描述、标签及部分内容,我们可以总结出以下与Java、Java EE、Struts2、Spring、Hibernate相关的学习知识点: ### Java基础 - **Java语言特性**:介绍Java的基本语法,包括变量、数据类型、流程...

    jsf-spring

    2. **AOP**:Spring的AOP模块提供了面向切面的编程,用于编写横切关注点,如日志、事务管理等,从而将这些关注点从主业务逻辑中分离出来。 3. **Spring MVC**:Spring的MVC模块提供了一个轻量级的Web应用框架,与...

    Hibernate 与 MyFaces的整合

    知识点:Hibernate与MyFaces的整合 一、概述与背景 在现代Web开发中,整合不同的技术框架以构建高效、灵活的应用程序是常见的实践。其中,Hibernate作为一款强大的对象关系映射(ORM)工具,用于简化Java应用与...

    spring、hibernate jar包介绍

    Spring 和 Hibernate 是两个广泛使用的 Java 开发框架,它们在企业级应用开发中扮演着至关重要的角色。Spring 提供了一个全面的编程和配置模型,而 Hibernate 则是 ORM(对象关系映射)框架,用于简化数据库操作。 ...

    基于Java EE的个人博客系统.zip

    在博客系统中,Servlet负责接收用户的请求,执行相应的业务逻辑,并将响应返回给客户端。例如,用户登录、发表文章、评论等操作都需要通过Servlet进行处理。 2. **JSP(JavaServer Pages)**:JSP是一种动态网页...

    图书馆系统(JAVAEE)

    在这个"图书馆系统"项目中,JAVAEE技术被巧妙地运用来实现了一个功能完善的图书管理系统。 首先,我们来看"bookman.sql"文件。这个文件通常是数据库脚本,用于初始化图书馆系统的数据库结构。在JAVAEE中,数据存储...

    java servlet做的图书管理系统.zip

    在这个“java servlet做的图书管理系统”项目中,我们可以学习到以下几个关键知识点: 1. **Servlet基础**:Servlet是Java编写的应用程序,它运行在服务器端,用于扩展服务器的功能,处理来自客户端(如浏览器)的...

    Configuring Seam and packaging Seam applications

    这涉及到在web.xml文件中配置Seam Filter和Seam Listener,以便处理JSF请求生命周期中的事件,并确保Seam组件与JSF页面正确交互。 #### 1.1.2. 使用Facelets Facelets是JSF推荐的视图表示技术,提供了更简洁、可...

    j2ee项目,网上书店,登录系统,学生系统等那

    在本项目中,我们将深入探讨基于J2EE技术构建的网上书店系统,其中包括登录系统以及学生管理系统等多个核心功能模块。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于开发和部署企业级应用...

    java EE水果管理系统 Java学习资料

    该管理系统可能涵盖了以下关键知识点: 1. **MVC(Model-View-Controller)设计模式**:这是一种广泛用于Web开发的设计模式,用于分离业务逻辑(Model)、用户界面(View)和应用控制逻辑(Controller)。在Java EE...

    javaEE知识点复习资料

    6. **JPA(Java Persistence API)与Hibernate**:JPA是JavaEE中的持久化标准,用于管理数据库操作。Hibernate是流行的JPA实现,提供了对象关系映射(ORM)功能,使得Java对象可以直接与数据库交互。 7. **JSF...

    J2EE应用开发详解

    141 9.1.2 JSF应用程序配置 142 9.2 一个简单的JSF应用 142 9.2.1 JSF应用程序开发步骤 143 9.2.2 用户登录实例 143 9.3 JSF应用程序架构 147 9.3.1 JSF请求处理生命周期 147 9.3.2 JSF事件驱动模型 148 9.3.3 JSF...

    某银行系统的j2ee资源代码4

    2. **Web容器**:J2EE应用通常部署在Web容器中,如Tomcat、Jetty或WebLogic等,这些容器负责管理Servlet、JSP和Filter等Web组件。 3. **EJB(Enterprise JavaBeans)**:作为业务逻辑层的核心,EJB提供了一种规范来...

    基于JavaWeb的校园问卷调查系统.zip

    这个系统可能旨在收集学生、教师以及其他校园成员的意见,帮助管理层了解校园内的需求、问题或者进行满意度调查。 【描述】:“基于javaweb的系统” 描述简洁地指出该系统是基于JavaWeb的,这意味着它由一系列Java...

    精通Java EE:精通Java EE 整合应用案例\源代码第五章

    《精通Java EE:精通Java EE 整合应用案例》是...通过深入研究这些知识点,开发者不仅能够掌握Java EE的核心技术,还能了解到如何在实际项目中整合这些技术,以解决复杂的企业级问题。结合源代码实践,学习效果会更佳。

    J2EE软件工程师内部培训资料

    - **事务,并发**:探讨如何在Hibernate中管理事务,并解决并发问题。 - **高级映射概念**:介绍更复杂的映射策略,如继承映射和组件映射。 #### Java Servlets - **Tomcat和Servlet介绍**:解释Servlet容器(如...

Global site tag (gtag.js) - Google Analytics