我想授权用户使用登录页面。我创建了一个登录页面login.jsp
,它有登录表单。当我提交表单时,它的值被重定向到一个check servlet,如果用户有效,servlet会设置会话UserName。
我通过过滤器截取此请求,并希望在chain.doFilter
之后重定向页面,但我收到一条错误消息,表明响应已提交。有什么问题?
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse) response;
if(req.getRequestURI().contains("/ShowHome")) {
chain.doFilter(req, res);
if(req instanceof HttpServletRequest) {
boolean authorized=false;
HttpSession session= req.getSession(false);
if(session!=null) {
if(session.getAttribute("UserName")!=null) {
authorized=true;
}
} else {
authorized=false;
}
if(authorized) {
System.out.println("You are authorized user ");
res.sendRedirect("/FilterAuth/welcome.jsp");
} else {
System.out.println("authentication failed ! ");
try {
//response.flushBuffer();
RequestDispatcher disp= request.getRequestDispatcher("/index.jsp");
disp.forward(request, response);
return;
} catch(Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
理想情况下,在servlet执行授权之前调用servlet过滤器。一旦成功,应通过chain.doFilter(req,res)传递调用。
不应在servlet过滤器中调用res.sendRedirect()。这只是表明响应已经提交。
web.xml中的正确映射可确保在调用servlet之前调用所需的过滤器。稍后在servlet中如果需要任何重定向,那么就可以实现。