Servlets 过滤器工作不正常
我为我的拍卖web应用程序制作了两个过滤器。我实现了两个过滤器,第一个过滤器执行简单的日志操作,第二个过滤器检查用户是否有权访问特定的资源 问题是这些过滤器只有在我第一次连接到网站时才能正常工作。实际上,它会在工具栏中显示用户的名称,只有在您正确登录时才会出现这种情况。之后,我注销并重复该过程,但第二个过滤器根本不工作 我使用println语句检查过滤器是否实际执行,但事实并非如此。第一个过滤器持续工作。当我更改xml映射时,会出现奇怪的部分。事实上,当我为两个过滤器绘制映射时,第一个过滤器继续工作!为了理解这一点,我昨天一整天都发疯了 更奇怪的是,如果我重写过滤器的xml映射,它们在第一次登录过程中都可以工作,但是一旦我注销并重复操作,登录过滤器就不再工作了。要制作我的web应用程序,我只需要JAVA7、NetBeans7.2和Tomcat7。我担心这可能是Netbeans想法的一个缺陷,但我不确定 xml映射如下所示:Servlets 过滤器工作不正常,servlets,servlet-filters,Servlets,Servlet Filters,我为我的拍卖web应用程序制作了两个过滤器。我实现了两个过滤器,第一个过滤器执行简单的日志操作,第二个过滤器检查用户是否有权访问特定的资源 问题是这些过滤器只有在我第一次连接到网站时才能正常工作。实际上,它会在工具栏中显示用户的名称,只有在您正确登录时才会出现这种情况。之后,我注销并重复该过程,但第二个过滤器根本不工作 我使用println语句检查过滤器是否实际执行,但事实并非如此。第一个过滤器持续工作。当我更改xml映射时,会出现奇怪的部分。事实上,当我为两个过滤器绘制映射时,第一个过滤器继续
过滤法
Filtri.FiltroLoggingFumettopoli
过滤法
/*
向前地
过滤蛋白
Filtri.FiltroLogin
过滤蛋白
/注册/*
伊尔米孔托
文迪
要求
**
以下是第一个在日志文件中进行日志记录的过滤器:
private void doBeforeProcessing(ServletRequest请求,ServletResponse响应)
抛出IOException、ServletException{
如果(调试){
日志(“FiltroLoggingFumettopoli:DoBeforeProcessing”);
}
HttpServletRequest httpRequest=(HttpServletRequest)请求;
HttpServletResponse=(HttpServletResponse)响应;
此.log(httpRequest.getRemoteHost()+)正在尝试访问页面:“+httpRequest.getRequestURL()+
“il”+TimeUtility.ottieniDataOra()+”+filterConfig.getFilterName());
System.out.println(“FILTRO文件DI日志-->日志文件中发生日志记录:”
+httpRequest.getRequestURL()+“il”+TimeUtility.ottieniDataOra()+”+filterConfig.getFilterName());
}
私有void doAfterProcessing(ServletRequest请求、ServletResponse响应)
抛出IOException、ServletException{
如果(调试){
日志(“filterologgingfumettopoli:DoAfterProcessing”);
}
}
public void doFilter(ServletRequest请求、ServletResponse响应、,
过滤链(链条)
抛出IOException、ServletException{
重新处理(请求、响应);
可丢弃问题=null;
试一试{
链式过滤器(请求、响应);
}捕获(可丢弃的t){
问题=t;
t、 printStackTrace();
}
doAfterProcessing(请求、响应);
if(问题!=null){
if(ServletException的问题实例){
抛出(ServletException)问题;
}
if(IOException的问题实例){
抛出(IOException)问题;
}
发送处理错误(问题、响应);
}
}
下面是一个过滤器,用于检查是否是授权用户希望访问Registrato文件夹中包含的资源,以及一些servlet:
公共类filterologin实现过滤器
{
private FilterConfig FilterConfig=null;
public void init(FilterConfig FilterConfig)
{
this.filterConfig=filterConfig;
}
public void doFilter(ServletRequest请求、ServletResponse响应、,
FilterChain链)抛出IOException、ServletException
{
HttpServletRequest httpRequest=(HttpServletRequest)请求;
HttpServletResponse=(HttpServletResponse)响应;
HttpSession sessione=httpRequest.getSession();
ServletContext sc=filterConfig.getServletContext();
String filterName=filterConfig.getFilterName();
字符串servletPath=“Servlet路径:”+httpRequest.getServletPath();
字符串url=“”;
Utente user=null;
user=(utete)sessione.getAttribute(“utete”);
if(user==null){
Cookie[]cookies=httpRequest.getCookies();
字符串email=CookieUtility.ottieniValoreCookie(cookies,userCookie);
如果(email.equalsIgnoreCase(“”){
System.out.println(“FILTRO登录------>NESSUN COOKIE TROVATO!”);
System.out.println(“FILTRO登录------>SERVLET上下文:+sc.getContextPath());
url=“/mostrainserrzioni”;
httpResponse.sendRedirect(sc.getContextPath()+url);
返回;
}
否则{
System.out.println(“FILTRO登录------>COOKIE TROVATO:+电子邮件”);
user=uteSQL.cercautent(电子邮件);
System.out.println(“FILTRO登录------>Utene TROVATO:+user.getUsername());
setAttribute(“utente”,用户);
字符串salloutente=“Benvenuto”+user.getNome();
setAttribute(“messaggio”,行礼者);
}
}
其他的
System.out.println(“FILTRO登录------>USER-FOUND:+USER.getUsername());
sc.log(httpRequest.getRemoteHost()+“cerca di accessere alla risorsa:”+httpRequest.getRequestURL())+
“il”+TimeUtility.ottieniDataOra()+”+filterConfig.getFilterName());
System.out.println(“FILTRO文件DI日志-->日志文件中发生日志记录:”
+httpRequest.getRequestURL()+“il”+TimeUtility.ottieniDataOra()+”+filterConfig.getFilterName());
链式过滤器(请求、响应);
}
公共空间销毁()
{
filterConfig=null;
}
}
简单地user=sessione==null?null:(utete)sessione.getAttribute(“utete”)
和之后的else{
只是:sessionone=httpRequest.getSession(true);
防止为非用户举行会话
–Salvatore Servodio 44米
HttpSession sessione = httpRequest.getSession(false);
if (sessione == null) {
System.out.println("FILTRO LOGIN----->USER NOT FOUND IN SESSION!");