我的过滤器怎么没有过滤效果

我的过滤器怎么没有过滤效果

过滤器代码

package com.book.mlibrary.filter;

import com.book.mlibrary.entity.User;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(filterName = "AuthFilter",urlPatterns = "/*")
public class AuthFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)resp;
        User existUser = (User)request.getSession().getAttribute("existUser");
        String requestURI = request.getRequestURI();
        System.out.println(requestURI);
        boolean flag = false;
        //不需要过滤的url
        String[] urls = {"/login",".html",".js",".css",".ico",".jpg",".png"};
        for (String str :
                urls) {
            if (requestURI.indexOf(str) != -1) {
                flag = true;
                break;
            }
        }
        if (flag) {
            chain.doFilter(request, response);
        } else {
            if (existUser != null) {
                chain.doFilter(request, response);
            } else {
                request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
            }
        }


    }

    public void init(FilterConfig config) throws ServletException {

    }

}

登录控制器LoginController代码

package com.book.mlibrary.controller;

import com.book.mlibrary.entity.User;
import com.book.mlibrary.service.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "LoginController",urlPatterns = "/login")
public class LoginController extends HttpServlet {
    private UserServiceImpl userService = new UserServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<User> userList = (List<User>) request.getServletContext().getAttribute("userList");
        HttpSession session = request.getSession();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        int login = userService.login(userList, user);
        if (login == 1) {
            session.setAttribute("existUser", user);
        } else {
            session.setAttribute("existUser",null);
        }
        request.getRequestDispatcher("WEB-INF/jsp/categoryList.jsp").forward(request,response);
        System.out.println(session.getAttribute("existUser"));
    }
}

麻烦老师康康~

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,在如下的代码中,if(login ==1) 登录成功转发到categoryList.jsp页面,在else中,登录失败跳转到登录页面,下边的转发语句去掉。

http://img1.sycdn.imooc.com//climg/5f865b1809776cfa07690269.jpg

本次访问路径中有login,在过滤器中是被放行的,所以需要在if和else中具体写登录成功或者失败需要转发的页面。

祝:学习愉快~

女神旭 提问者 2020-10-13 19:20:15

UserServiceImpl 代码

package com.book.mlibrary.service;

import com.book.mlibrary.entity.User;
import com.book.mlibrary.utils.XmlDataSource;

import java.util.List;

public class UserServiceImpl {
    /**
     * 校验用户是否存在
     * @param userList
     * @param user 待校验的用户
     * @return 1-用户存在 0-用户不存在
     */
    public int login(List<User> userList, User user) {
        for (User u :
                userList) {
            if (u.getUsername().equals(user.getUsername()) && u.getPassword().equals(user.getPassword())) {
                return 1;
            }
        }
        return 0;
    }

}


好帮手慕阿满 2020-10-13 19:08:39

同学你好,建议同学将UserServiceImpl类中的login()方法贴一下,查看该方法的返回值是什么。

另外建议同学再如下位置处输出一下existUser,查看是否获取为null。

http://img1.sycdn.imooc.com//climg/5f858a250949066007840282.jpg

如果不为null,可以正常登录。

祝:学习愉快~

  • 提问者 女神旭 #1
    当输入用户名错误时,existUser获取的值为null
    2020-10-13 19:40:54
好帮手慕阿满 2020-10-13 10:26:19

同学你好,同学说的过滤器没有效果是什么意思呢?访问某个路径没有被拦截?建议同学具体描述一下情况,如果是路径没有被拦截,建议同学访问路径贴一下。另外问一下同学是否登录。

祝:学习 愉快~

  • 提问者 女神旭 #1
    就是我用户名密码错误与否都可以登入后台页面。
    2020-10-13 18:53:24
  • 提问者 女神旭 #2
    就是无论用户名正确与否都能进入后台管理页面
    2020-10-13 18:56:34
  • 提问者 女神旭 #3
    localhost:8080/login.html
    2020-10-13 18:57:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师