JAVAEE 问题:Filter 的用户登录问题,无法在控制台打印相关信息

问题描述

这是Filter的实现类代码packagelee;importjavax.servlet.*;importjavax.servlet.http.*;importjavax.servlet.annotation.*;importjava.io.*;publicclassAuthorityFilterimplementsFilter{//FilterConfig可用于访问Filter的配置信息privateFilterConfigconfig;//实现初始化方法publicvoidinit(FilterConfigconfig){System.out.println("初始化");this.config=config;}//实现销毁方法publicvoiddestroy(){System.out.println("销毁");this.config=null;}//执行过滤的核心方法publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{System.out.println("核心办法");//获取该Filter的配置参数Stringencoding=config.getInitParameter("encoding");StringloginPage=config.getInitParameter("loginPage");StringproLogin=config.getInitParameter("proLogin");//设置request编码用的字符集request.setCharacterEncoding(encoding);//①HttpServletRequestrequ=(HttpServletRequest)request;HttpSessionsession=requ.getSession(true);//获取客户请求的页面StringrequestPath=requ.getServletPath();//如果session范围的user为null,即表明没有登录//且用户请求的既不是登录页面,也不是处理登录的页面if(session.getAttribute("user")==null&&!requestPath.endsWith(loginPage)&&!requestPath.endsWith(proLogin)){//forward到登录页面System.out.println(session.getAttribute("user"));request.setAttribute("tip","您还没有登录");request.getRequestDispatcher(loginPage).forward(request,response);}//"放行"请求else{System.out.println("放行");chain.doFilter(request,response);}}}

这是配置文件<?xmlversion="1.0"encoding="GBK"?><web-appxmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!--定义Filter--><filter><!--Filter的名字--><filter-name>authority</filter-name><!--Filter的实现类--><filter-class>lee.AuthorityFilter</filter-class><!--下面三个init-param元素配置了三个参数--><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param><init-param><param-name>loginPage</param-name><param-value>/login.jsp</param-value></init-param><init-param><param-name>proLogin</param-name><param-value>/proLogin.jsp</param-value></init-param></filter><!--定义Filter拦截的URL地址--><filter-mapping><!--Filter的名字--><filter-name>authority</filter-name><!--Filter负责拦截的URL--><url-pattern>/*</url-pattern></filter-mapping></web-app>

这是登录jsp的页面代码<%@pagecontentType="text/html;charset=GBK"language="java"errorPage=""%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>登录页面</title><metaname="website"content=""/></head><body><h2>登录页面</h2><%if(request.getAttribute("tip")!=null){out.println("<fontcolor='red'>"+request.getAttribute("tip")+"</font>");}%><formmethod="post"action="proLogin.jsp">用户名:<inputtype="text"name="name"/><br/><inputtype="submit"value="登录"/></form></body></html>

这是登录成功的JSP页面<%@pagecontentType="text/html;charset=GBK"language="java"errorPage=""%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>登录页面</title><metaname="website"content=""/></head><body><h2>登录页面</h2><%session.setAttribute("user",request.getParameter("name"));%>登录成功,可以访问该应用的其他页面</body></html>

问题是这样子的:想要知道Filter是如何拦截客户端发来的请求的,所以在其实现类中的办法中都有向控制台打印字符的语句。但是实际上,控制台却什么消息都没有。然而让人困惑的是,Filter似乎有拦截到了客户端的请求。(Test为项目名称)现象一:输入:http://localhost:8080/Test/a.jsp①,浏览器跳转到login界面(a.jsp并不存在项目中),控制台无反应,登录成功后可进入登录成功画面,此时更加让我疑惑不解的事又发生了,再次输入①,第一次回车,登录界面,第二次回车404页面,第三次回车又是login界面,之后一直回车都不变(以上都是在同一个浏览器,同一页面中进行的)疑问:1,客户端是发送了一个不存在的页面请求,按道理如果Filter没有拦截到的话,应该会出现404页面的,但如果拦截到并转到login界面的话,应该有打印的才对。2,浏览器显示成功界面时,为何会出现login界面,404,login界面现象2:如果在浏览器中输入http://localhost:8080/Test/filter.jsp其中filter.jsp是项目中存在的一个简单的显示页面,此时浏览器能成功显示此页面,并没有跳转到login界面,再输入其他类似filtersss.jsp这些页面,浏览器不管回车多少次都显示404错误页面,但是更加奇怪的事情又发生了,输入之前的不存在的a.jsp,又成功跳转到了login界面并且出现了404-login的情况疑问:1拦截器Filter的作用不如前期预想的发展,似乎服务器端记住了类似a.jsp,这些不存在的页面,只要出现a,jsp,aa.jsp.aa就会实现跳转现象2:如果将a.jsp改成z.jsp这些一样不存在的页面时又会一直出现404错误页面现在头都大了,都不知道问题是在哪里了,希望大神能指点一下。本人也实在是不知道怎么调试JAVAEE的项目,感觉IDE能提供的异常信息都隐形了,无从下手

解决方案

解决方案二:
太长了,也太困了~~看你问题写的这么详细,帮顶下吧
解决方案三:
看上去好像没什么问题,如果项目不是太大的话,可以发出来看看。也可以通过以下方法试试:1.可能是应用服务器上部署的是跟你现在测试的项目的项目名称一样的项目,删除应用服务器上部署的项目,同时清空情况工作目录,重新部署项目;2.可能是浏览器的缓存问题,清空浏览器缓存;3.可能是代理问题,打开host文件,看看你访问的域名或ip有没有指定到别的服务器上;
解决方案四:
引用2楼gaofuqi的回复:

看上去好像没什么问题,如果项目不是太大的话,可以发出来看看。也可以通过以下方法试试:1.可能是应用服务器上部署的是跟你现在测试的项目的项目名称一样的项目,删除应用服务器上部署的项目,同时清空情况工作目录,重新部署项目;2.可能是浏览器的缓存问题,清空浏览器缓存;3.可能是代理问题,打开host文件,看看你访问的域名或ip有没有指定到别的服务器上;

1项目重新部署在服务器上时,问题仍然存在。那说明一下我平时部署项目的方法。这是一个书上的例子,我是直接将源码上的WEB-INF文件以及JSP文件一起复制到项目的WebContent路径下,然后刷新我的Test项目,然后运行测试的。2浏览器缓存问题,在清空浏览器缓存的情况下问题仍然存在。但是不知道Eclipse的内置浏览器有没有清空缓存,因为打开内置浏览器的下拉框时仍然有我以前项目的路径3host路径如下,也不存在任何问题以下是项目网盘地址链接:http://pan.baidu.com/s/1sjsdvtV密码:1awt有劳各位了
解决方案五:
怀疑是浏览器缓存问题。别用回车,使用Ctrl+F5强制刷新,看看服务端控制台有没有输出,前面页面有没有正确跳转。
解决方案六:
引用4楼zhangjihao的回复:

怀疑是浏览器缓存问题。别用回车,使用Ctrl+F5强制刷新,看看服务端控制台有没有输出,前面页面有没有正确跳转。

能讲一讲eclipse内置浏览器与普通浏览器之间的区别吗?我也怀疑是的确是缓存的问题。因为我在笔记本上重新部署项目时又可以了。而且由于这个项目是平时用来测试用的,所以每当测试一个项目时,会把以前项目的WebContent直接删除,再重建路径。不知会不会产生影响?
解决方案七:
先就楼主的这个问题已不收。楼主没有看EL和JSTL吗?
解决方案八:
先就楼主的这个问题已不说。楼主没有看EL和JSTL吗?
解决方案九:
看了半天也看不出哪里有问题。置于浏览器缓存的问题楼上已经说了。楼主如果解决了有劳告诉我下是怎么解决的

时间: 2024-09-20 20:01:48

JAVAEE 问题:Filter 的用户登录问题,无法在控制台打印相关信息的相关文章

java中使用Filter控制用户登录权限具体实例_java

学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

Dreamweaver构建Blog全程实录(7)-用户登录的实现

dreamweaver 第七章  Doking's BLOG用户登录页面的实现 已完成用户的注册,用户现在可以登录到网站中,发表笔记.笔记回复. 7.1  用户登录服务器行为 用户登录,经过验证正确,页面换了个用户登录后的面貌. (1)打开模板bkblog.dwt.aspx,在左边栏插入表格yhtab,并设计如图7-1黑色圈中所示. (2)插入关于YH表查询的数据集yhlog,以验证用户登录的正确. ①将数据集yhlog设为筛选,如图7-2所示. 图7-1  表格yhtab的设计图    开发全

Dreamweaver构建Blog(7):用户登录的实现2

dreamweaver 7.2  用户发表回复信息 用户登录后,就可以对 各学习笔记发表回复信息. (1)打开hf.aspx,插入表单yhplfrm,再插入表格Hftab,在表格中插入服务器文本框控件,ID为HFNAME:插入服务器文本区域控件,ID为HFTEXT:插入"发表"按钮,ID为plbottom,将其设为禁用,结果如图7-18所示. 图7-18  表格Hftab的有关设计 (3)绑定数据session("usename")到表格Hftab中的"姓

Linux中如何定制用户登录时显示的信息

如何定制用户登录时显示的信息,在/etc目录下放一个名字叫motd的文本文件实现的,例如,建立自己的/etc/motd: $cat /etc/motd welcome to www.ithov.com my server ! 那么,当用户登录系统的时候会出现以下信息: Last login: Thu Jun 20 13:45:21 2013 from 192.168.1.2welcome to www.ithov.com my server ![root@localhost ~]#

步入struts2大门(用户登录)

最近在学struts2框架,其实好多技术并不难,之所以觉得它难就是,只是一直徘徊在外围而找不到打开它的入口.找开的入口后面学起来就很顺了,本文用最详细的步骤,最傻瓜方式为你打开这个入口.只要你少有java基础,那就可以跟我一起来做吧! 准备三样东西: MyEclipse 8.5 tomcat 6.0 struts2.0.14 我这个版本较早,你可以用最新版本,可能会存在些差异,具体的说明. =====================================================

界面-求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决

问题描述 求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决 求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决?想做一个如果用户数连接达到500人,那么再有新用户访问网站就跳转到友好界面,如何做?是在TOMCAT里面可以设置,还是程序里面可以控制,求代码方案 解决方案 浏览器关闭了session就销毁了,不管是正常关闭还是非正常关闭,正常退出时销毁session,浏览器关闭也会销毁session,所有你

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)_java

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

Intellij IDEA 构建Spring Web项目 — 用户登录功能

原文:Intellij IDEA 构建Spring Web项目 - 用户登录功能 相关软件: 1.Intellij IDEA14:http://pan.baidu.com/s/1nu16VyD 2.JDK7:http://pan.baidu.com/s/1dEstJ5f 3.Tomcat(apache-tomcat-6.0.43):http://pan.baidu.com/s/1kUwReQF 4.MySQL(mysql-essential-5.1.68-winx64):http://pan.b

123 net-验证用户登录不成功,怎么办,求助,做毕业设计,学的不好

问题描述 验证用户登录不成功,怎么办,求助,做毕业设计,学的不好 网上选课系统,登陆界面有三种不同的用户登录,已经判断了,不知道怎么验证用户是否登录 asp:ListItem Value="3" Text="管理员"> protected void btnLogin_Click(object sender, ImageClickEventArgs e) { string uType = rdUserType.SelectedValue; string uId