【问题标题】:Am i doing the Servlet-Filter correctly?我是否正确地执行了 Servlet-Filter?
【发布时间】: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>

问题是……

  1. 我仍然可以在不进入登录屏幕的情况下访问其他 servlet。 我的代码有什么问题。
  2. 我怎样才能做得更好?

【问题讨论】:

  • 你实际上在哪里调度登录屏幕,我没有找到这样的代码。

标签: jsp servlets servlet-filters


【解决方案1】:

您只检查会话是否已创建,而不是用户是否已登录。这是错误的。会话可以在用户登录之前很久就已经创建了。

当你登录一个用户时,你应该把它设置为一个会话属性

request.getSession().setAttribute("user", user);

在过滤器中你应该检查它

User user = (User) request.getSession().getAttribute("user");

if (user == null) {
    // Not logged in.
} else {
    // Logged in.
}

另见:

【讨论】:

  • 嗨,巴鲁斯克先生!再次感谢您... :)
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多