问题
This java web application run like an infinite loop. can anyone tell me the reason? need to filter every request here.allowed can use the system.other users should go to login page with a message..please help me to do this.
FilterRequest.java
package com.mobitel.bankdemo.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mobitel.bankdemo.domain.User;
public class FilterRequest implements Filter{
FilterConfig filterConfig = null;
public FilterRequest() {
super();
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
System.out.println("Inside the filter.............." );
HttpSession session = request.getSession(true);
User u = null;
if(session.getAttribute("loggedUser")!=null){
u = (User) session.getAttribute("loggedUser");
}
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
}else{
String message = "Please Login!";
req.setAttribute("loginMsg", message);
response.sendRedirect("login2.jsp");
}
}
public void destroy() {
// do cleanup stuff
}
}
web.xml filter mapping
<filter>
<filter-name>FilterRequest</filter-name>
<filter-class>com.mobitel.bankdemo.web.FilterRequest</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterRequest</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Thank you in advance
回答1:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
System.out.println("Inside the filter.............." );
String loginUrl= request.getContextPath() + "/login2.jsp";//url for login page
String uri = request.getRequestURI().toString();
if (uri.endsWith(loginUrl)){// if uri is login page then no need to check if login, just process the chain
chain.doFilter();
}
else{ HttpSession session = request.getSession(true);
User u = null;
if(session.getAttribute("loggedUser")!=null){
u = (User) session.getAttribute("loggedUser");
}
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
}else{
String message = "Please Login!";
req.setAttribute("loginMsg", message);
response.sendRedirect("login2.jsp");
return;
}
}
}
回答2:
i am not java expert but just looking over your code i just want to say two things
(1) consider if filter gets a user name from request like here
if(session.getAttribute("loggedUser")!=null){
u = (User) session.getAttribute("loggedUser");
}
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
it will go again into subroutine or method to filter other things but after getting into this method you are doing user=null and due to this it will again enter into same if we have sorted out before
which is
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
so define User u=null outside of your method. May be it will solve ur problem
来源:https://stackoverflow.com/questions/17568476/infinite-loop-occures-when-run-the-program