javaweb中,如果過濾器想使用getAttribute()方法,必須要對request進行強制轉換

鄒飛鳴發表於2020-11-20
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {

        Object attribute = ((HttpServletRequest) request).getSession().getAttribute(Constants.USER_SESSION);

        if(attribute == null){
            // 如果不正確,那麼還要跳回登陸頁面並顯示,不正確
            request.setAttribute("error","請先登陸,再進去!");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
            filterChain.doFilter(request,response);
        }
    }

可以很清楚看到,這裡的response,requestServletResponseServletRequest型別,而一個 servlet 他繼承的是 HttpServlet ,所以本質上,雖然都是在使用requestresponse,但是他們之間的作用域是不一樣的,如果想搞清楚,這兩個類之間的關係請看連結:
https://www.cnblogs.com/DreamFather/p/11326929.html
那麼當過濾器裡面想使用session這樣的物件時,必須要對此時的request進行強制型別轉換,即:

Object attribute = ((HttpServletRequest) request).getSession().getAttribute(Constants.USER_SESSION);

才能真正的拿到由另一個servlet中用session.setAttribute()方法進行儲存的東西。即:此時使用request呼叫的getAttribute()方法,才能真正拿到被儲存進去的東西。

相關文章