【发布时间】:2011-09-06 08:42:56
【问题描述】:
美好的一天!
我正在尝试禁用对不属于成功登录的页面的访问。我将登录用户名存储在会话中,以便确定会话是否为空。
我有几个页面,所以我决定在 xml 中创建一个过滤器并过滤 servlet,这样我就不需要在所有页面上都放置 if(session == null) 代码。
我在servlet中的代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession(false);
RequestDispatcher rd;
//need to get the servlet path
String url = req.getServletPath();
if( url.equals("/LoginServlet") || url.equals("/LogoutServlet") || url.equals("/login.html") ){
chain.doFilter(request, response);
} else {
if(session == null){
rd = req.getRequestDispatcher("index.html");
rd.forward(req, res);
} else {
chain.doFilter(request,response);
}
}
}
我的xml过滤器如下:
<filter>
<display-name>sessionFilter</display-name>
<filter-name>sessionFilter</filter-name>
<filter-class>com.test.demoSession.filter.sessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
问题是……
- 我仍然可以在不进入登录屏幕的情况下访问其他 servlet。 我的代码有什么问题。
- 我怎样才能做得更好?
【问题讨论】:
-
你实际上在哪里调度登录屏幕,我没有找到这样的代码。
标签: jsp servlets servlet-filters