简体   繁体   English

Servlet过滤器无法正常工作

[英]Servlet filters not working properly

I have a login.java servlet, from where after taking the username and password, if correct, we are directed to welcome.java servlet.A filter named loginfilter.java verifies the username and password. 我有一个login.java servlet,如果正确,我们将从那里获取用户名和密码,然后直接转到welcome.java servlet。名为loginfilter.java的过滤器将验证用户名和密码。 If the username and password are not correct, i have an errorpage.java servlet which is then called. 如果用户名和密码不正确,则有一个errorpage.java servlet,然后将其调用。

My filter is not working which i dont know why. 我的过滤器不起作用,我不知道为什么。 i think my web.xml code and filters code are correct. 我认为我的web.xml代码和过滤器代码是正确的。 Plz help me find out the error. 请帮我找出错误。

Here is the code for my filter 这是我的过滤器的代码

package filters;


import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class loginfilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain
    chain throws IOException, ServletException     {
           String u=request.getParameter("username");
           String p=request.getParameter("password");
           String user="akshay";
           String pass="akshay";
           if (u.equals(user) && p.equals(pass)){
               chain.doFilter(request,response);
           }        
     }

    @Override
    public void destroy() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    private RequestDispatcher getReuestDispatcher(String loginpage) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}

Here is the code for web.xml: 这是web.xml的代码:

<?xml version="1.0" encoding="UTF-8"?>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>login</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>welcomepage</servlet-name>
        <servlet-class>welcomepage</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>errorpage</servlet-name>
        <servlet-class>errorpage</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <error-page>
        <error-code>404</error-code>
        <location>/errorpage</location>
    </error-page>
    <error-page>
        <error-code>403</error-code>
        <location>/errorpage</location>
    </error-page>
    <error-page>
        <exception-type>javax.servlet.ServletException</exception-type>
        <location>/errorpage</location>
    </error-page>
    <error-page>
        <exception-type>javax.io.IOException</exception-type>
        <location>/errorpage</location>
    </error-page>
    <filter>
        <filter-name>loginfilter</filter-name>
        <filter-class>filters.loginfilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <servlet-name>welcomepage</servlet-name>
    </filter-mapping>
    <servlet-mapping>
        <servlet-name>welcomepage</servlet-name>
        <url-pattern>/welcomepage</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>errorpage</servlet-name>
        <url-pattern>/errorpage</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Remove the lines with: 使用以下命令删除行:

throw new UnsupportedOperationException("Not supported yet.");

These lines prevent the filter is initialized, and also stops the application. 这些行阻止过滤器初始化,并停止应用程序。

The server calls init(FilterConfig) once to prepare the filter for service, then calls doFilter() any number of times for requests specially set up to use the filter. 服务器调用一次init(FilterConfig)来准备用于服务的过滤器,然后多次调用doFilter()以针对专门设置为使用该过滤器的请求。 The FilterConfig interface has methods to retrieve the filter's name, its init parameters, and the active servlet context. FilterConfig接口具有检索过滤器名称,其初始化参数和活动Servlet上下文的方法。 The server calls destroy() to indicate that the filter is being taken out of service. 服务器调用destroy()表示过滤器已退出服务。

http://www.servlets.com/soapbox/filters.html http://www.servlets.com/soapbox/filters.html

Throwing exception in init method is not valid init方法中的抛出异常无效
It will stop the initialization of the filter. 它将停止过滤器的初始化。
Remove below line 删除以下行

  throw new UnsupportedOperationException("Not supported yet.");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM