• 登录拦截功能


    1 在web.xml中配置filter(要放在字符集过滤器之后,否则字符过滤会失效)

    <!-- 登录拦截 -->
     <filter>
            <display-name>LoginFilter</display-name>
            <filter-name>LoginFilter</filter-name>
            <filter-class>com.xxx.common.LoginFilter</filter-class>
     </filter>
     <filter-mapping>
            <filter-name>LoginFilter</filter-name>
            <url-pattern>/*</url-pattern>
     </filter-mapping>

    2.拦截器类(登录,注册,静态文件.js.css等不进行过滤,放过去)

    package com.xxx.common;
    
    import java.io.IOException;
    import java.io.Writer;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.json.JSONObject;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    
    import com.xxx.entity.User;
    import com.xxx.service.LoginService;
    import com.xxx.util.CommonUtil;
    
    public class LoginFilter implements Filter {
    
        private LoginService loginService;
    
        public LoginService getLoginService() {
            return loginService;
        }
    
        public void setLoginService(LoginService loginService) {
            this.loginService = loginService;
        }
    
        public LoginFilter() {
        }
    
        /**
         * 初始化
         */
        public void init(FilterConfig config) throws ServletException {
            ServletContext context = config.getServletContext();
            ApplicationContext ctx = WebApplicationContextUtils
                    .getWebApplicationContext(context);
            loginService = (LoginService) ctx.getBean(LoginService.class);
    
        }
    
        public void destroy() {
            loginService = null;
        }
    
        /**
         * 登录拦截
         */
        public void doFilter(ServletRequest req, ServletResponse res,
                FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpRequest = (HttpServletRequest) req;
            HttpServletResponse httpResponse = (HttpServletResponse) res;
            String path = CommonUtil.getRequestURL(httpRequest);
            
            if (path.indexOf("/tologin") != -1 || path.indexOf("/login") != -1
                    || path.indexOf("/include") != -1) {
                chain.doFilter(req, res);
            } else {
                User user = loginService.getCurrentUser();
                if (user == null) {
                    boolean isAjaxRequest = isAjaxRequest(httpRequest);
                    if (isAjaxRequest) {
                        httpResponse.setCharacterEncoding("UTF-8");
                        Writer out = httpResponse.getWriter();
                        JSONObject jsonObj = new JSONObject();
                        jsonObj.put("success", false);
                        jsonObj.put("code", "noLogin");
                        jsonObj.put("message", "请您先登录系统!");
                        out.write(jsonObj.toString());
                        out.flush();
                        out.close();
                    } else {
                        httpResponse.sendRedirect("/项目路径/Login/tologin");
                    }
                } else {
                    chain.doFilter(req, res);
                }
    
            }
        }
    
        /**
         * 判断是否为Ajax请求
         *
         * @param request
         *            HttpServletRequest
         * @return 是true, 否false
         */
        public static boolean isAjaxRequest(HttpServletRequest request) {
            String requestType = request.getHeader("X-Requested-With");
            return requestType != null && "XMLHttpRequest".equals(requestType);
        }
    
    }
  • 相关阅读:
    Oracle不同版本中序列的注意点
    SQLite – LIMIT子句
    LeetCode:219. Contains Duplicate II
    python返回值进行unpack
    Android编程权威指南第三版 第32章
    ThinkPHP使用soapclient调用webservice接口
    C++杂记
    关于Docker清理
    Leetcode 063 不同路径二
    第五章:详解广播机制
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4602566.html
Copyright © 2020-2023  润新知