【发布时间】:2013-06-29 21:30:55
【问题描述】:
我想在会话未打开或关闭时重定向到起始页。我添加了 Servlet 过滤器,但它不起作用。
我的 SessionFilter 类:
public class SessionFilter implements Filter {
private ArrayList<String> urlList;
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String url = request.getServletPath();
HttpSession session = request.getSession(false);
if (new Bean().getLoggedIn() || urlList.contains(url) || session != null){
chain.doFilter(req, resp);
}
else{
response.sendRedirect("index.jsf");
}
}
public void init(FilterConfig config) throws ServletException {
String urls = config.getInitParameter("avoid-urls");
StringTokenizer token = new StringTokenizer(urls, ",");
urlList = new ArrayList<String>();
while (token.hasMoreTokens()) {
urlList.add(token.nextToken());
}
}
public void destroy() {
}
}
我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.tsystems.demail.SessionFilter</filter-class>
<init-param>
<param-name>avoid-urls</param-name>
<param-value>/index.jsf, /registration.jsf</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
</web-app>
当我登录时new Bean().getLoggedIn() 是真的。注销时 - 错误。如何更改我的过滤器?我哪里出错了?
【问题讨论】:
-
Bean是什么?您的意思是每次都创建一个新的吗? -
"but it's not working" 它怎么不工作,它根本不重定向,它重定向到错误的页面,你得到一个 HTTP 500,什么也没发生,什么? else 块中的代码是否完全执行,由调试器确定?请详细点,谢谢。
-
@DaveNewton 我的 Bean 类:pastebin.com/EKU1d0EY
-
@Keith 我没有重定向,当会话关闭或未打开时。
-
检查会话是否为空,并检查你的 urlList/url 值,我认为它不会像你想要的那样工作
标签: java jsf servlets servlet-filters