zoukankan      html  css  js  c++  java
  • 过滤器

    中文乱码

    @WebFilter(filterName = "CharacterEncodingFilter", urlPatterns = "/*")
    public class CharacterEncodingFilter implements Filter {
        public static String encoding;
    
        public void init(FilterConfig config) throws ServletException {
            // Web服务器启动就初始化了
            encoding = config.getServletContext().getInitParameter("encoding");
        }
    
        public void destroy() {
            // Web服务器关闭就销毁
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
            request.setCharacterEncoding(encoding);
            response.setContentType("text/html;charset=" + encoding);
            chain.doFilter(request, response);
        }
    }
    

    登陆拦截

    拦截器

    @WebFilter(filterName = "AuthorityFilter", urlPatterns = "/*")
    public class AuthorityFilter implements Filter {
        public static List<String> passPath = new ArrayList<>();
        public void init(FilterConfig config) throws ServletException {
            passPath.add("login.jsp");
            passPath.add("login");
        }
    
        public void destroy() {
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            String requestURI = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1);
            String userID = (String) request.getSession().getAttribute("UserID");
            if (!passPath.contains(requestURI)) {
                // 不在放行范围内的其他链接,如果没有登陆则跳到登陆页面
                if (userID == null) {
                    response.sendRedirect(request.getContextPath() + "/login.jsp");
                } else {
                    chain.doFilter(request, response);
                }
            } else {
                // 被放行的链接,如果已登陆则跳到首页
                if (userID != null) {
                    response.sendRedirect(request.getContextPath() + "/index.jsp");
                }else {
                    chain.doFilter(request, response);
                }
            }
        }
    }
    

    LoginServlet

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if ("admin".equals(username) && "admin".equals(password)) {
            request.getSession().removeAttribute("msg");
            request.getSession().setAttribute("UserID", request.getSession().getId());
            response.sendRedirect(request.getContextPath() + "/common/LoginSuccess.jsp");
        } else {
            request.getSession().setAttribute("msg", "账号或密码错误");
            response.sendRedirect(request.getContextPath() + "/login.jsp");
        }
    }
    

    LogoutServlet

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().removeAttribute("UserID");
        response.sendRedirect(request.getContextPath() + "/login.jsp");
    }
    

    LoginJSP

    <body>
    <form action="${pageContext.request.contextPath}/login">
        用户名:<input type="text" name="username"> <br/>
        密码:<input type="password" name="password"> <br/>
        <input type="submit" value="登陆"> ${pageContext.session.getAttribute("msg")}
    </form>
    </body>
    

    LogSuccessJSP

    <body>
    <h1>登陆成功!</h1>
    <form action="${pageContext.request.contextPath}/logout">
        <input type="submit" value="注销">
    </form>
    </body>
    

    总结

    折腾了好久,登陆拦截器的关键点在于某些路径需要放行,否则会造成各种问题。且在过滤器里进行重定向的链接一定不能执行chain.doFilter(request, response);,否则继续执行后续代码如果有再有重定向就会报错,最好就是重定向完就不继续chain了,直接执行重定向代码。这也是chain的意义。

  • 相关阅读:
    Apache Flink教程
    开发EasyRTSPServer组件时如何使用ffserver搭建一套RTSP流媒体服务器并分发RTSP视频流?
    【解决方案】用科技的力量构筑“食品安全”防火墙,明厨亮灶保护“舌尖上的安全”
    RTSP/GB28181视频智能分析人脸识别系统EasyCVR除人脸门禁外还可以运用到哪些方向?
    GB28181/RTSP/SDK/Ehome协议安防视频融合平台EasyCVR新增分组管理功能操作介绍
    【解决方案】RTSP/GB28181协议视频平台EasyCVR在烟草行业是如何搭建一套网络视频监控系统的?
    【解决方案】RTSP/GB28181协议视频融合监控平台EasyCVR在三维可视化系统中的应用
    linux 学习随记---设置日志时间戳
    服务器端口总结
    (转载)PowerShell因为在此系统中禁止执行脚本解决方法
  • 原文地址:https://www.cnblogs.com/shenleg/p/14263719.html
Copyright © 2011-2022 走看看