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地址清空?
分享到:
- 2008-04-09 10:20
- 浏览 838
- 评论(3)
- 论坛回复 / 浏览 (3 / 1741)
- 查看更多
相关推荐
例如,Struts处理用户请求,JSF和Myfaces构建用户界面,Spring管理对象和事务,Hibernate负责数据持久化,而Filter则在请求进入系统前进行预处理。MySQL则作为所有数据的存储库,通过Hibernate的ORM机制与Java对象...
这是一个基于Java技术栈的Web应用开发案例,使用了JSF2、PrimeFaces 3、Spring和Hibernate这四个关键组件。让我们逐一深入理解这些技术及其在项目中的作用。 **JSF2 (JavaServer Faces 2)** 是一个用于构建用户界面...
在构建企业级Java应用时,JSF(JavaServer Faces)、Spring和JPA(Java Persistence API,通常通过Hibernate实现)是一个常见的技术栈。这篇文档主要介绍了如何整合这些技术来搭建一个开发环境。 首先,JSF是一种...
不过,需要注意的是,项目中可能存在未清理的冗余jar包,为避免潜在问题,建议根据具体需求精简jar包列表。此外,随着技术的发展,当前版本可能已过时,可以考虑升级到更现代的框架版本,如Spring Boot和Hibernate ...
根据提供的标题、描述、标签及部分内容,我们可以总结出以下与Java、Java EE、Struts2、Spring、Hibernate相关的学习知识点: ### Java基础 - **Java语言特性**:介绍Java的基本语法,包括变量、数据类型、流程...
2. **AOP**:Spring的AOP模块提供了面向切面的编程,用于编写横切关注点,如日志、事务管理等,从而将这些关注点从主业务逻辑中分离出来。 3. **Spring MVC**:Spring的MVC模块提供了一个轻量级的Web应用框架,与...
知识点:Hibernate与MyFaces的整合 一、概述与背景 在现代Web开发中,整合不同的技术框架以构建高效、灵活的应用程序是常见的实践。其中,Hibernate作为一款强大的对象关系映射(ORM)工具,用于简化Java应用与...
Spring 和 Hibernate 是两个广泛使用的 Java 开发框架,它们在企业级应用开发中扮演着至关重要的角色。Spring 提供了一个全面的编程和配置模型,而 Hibernate 则是 ORM(对象关系映射)框架,用于简化数据库操作。 ...
在博客系统中,Servlet负责接收用户的请求,执行相应的业务逻辑,并将响应返回给客户端。例如,用户登录、发表文章、评论等操作都需要通过Servlet进行处理。 2. **JSP(JavaServer Pages)**:JSP是一种动态网页...
在这个"图书馆系统"项目中,JAVAEE技术被巧妙地运用来实现了一个功能完善的图书管理系统。 首先,我们来看"bookman.sql"文件。这个文件通常是数据库脚本,用于初始化图书馆系统的数据库结构。在JAVAEE中,数据存储...
在这个“java servlet做的图书管理系统”项目中,我们可以学习到以下几个关键知识点: 1. **Servlet基础**:Servlet是Java编写的应用程序,它运行在服务器端,用于扩展服务器的功能,处理来自客户端(如浏览器)的...
这涉及到在web.xml文件中配置Seam Filter和Seam Listener,以便处理JSF请求生命周期中的事件,并确保Seam组件与JSF页面正确交互。 #### 1.1.2. 使用Facelets Facelets是JSF推荐的视图表示技术,提供了更简洁、可...
在本项目中,我们将深入探讨基于J2EE技术构建的网上书店系统,其中包括登录系统以及学生管理系统等多个核心功能模块。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于开发和部署企业级应用...
该管理系统可能涵盖了以下关键知识点: 1. **MVC(Model-View-Controller)设计模式**:这是一种广泛用于Web开发的设计模式,用于分离业务逻辑(Model)、用户界面(View)和应用控制逻辑(Controller)。在Java EE...
6. **JPA(Java Persistence API)与Hibernate**:JPA是JavaEE中的持久化标准,用于管理数据库操作。Hibernate是流行的JPA实现,提供了对象关系映射(ORM)功能,使得Java对象可以直接与数据库交互。 7. **JSF...
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...
2. **Web容器**:J2EE应用通常部署在Web容器中,如Tomcat、Jetty或WebLogic等,这些容器负责管理Servlet、JSP和Filter等Web组件。 3. **EJB(Enterprise JavaBeans)**:作为业务逻辑层的核心,EJB提供了一种规范来...
这个系统可能旨在收集学生、教师以及其他校园成员的意见,帮助管理层了解校园内的需求、问题或者进行满意度调查。 【描述】:“基于javaweb的系统” 描述简洁地指出该系统是基于JavaWeb的,这意味着它由一系列Java...
《精通Java EE:精通Java EE 整合应用案例》是...通过深入研究这些知识点,开发者不仅能够掌握Java EE的核心技术,还能了解到如何在实际项目中整合这些技术,以解决复杂的企业级问题。结合源代码实践,学习效果会更佳。
- **事务,并发**:探讨如何在Hibernate中管理事务,并解决并发问题。 - **高级映射概念**:介绍更复杂的映射策略,如继承映射和组件映射。 #### Java Servlets - **Tomcat和Servlet介绍**:解释Servlet容器(如...