• Spring-mvc登录方法及JSP的拦截


    添加登录拦截器:LoginInterceptor

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    
    public class LoginInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            Object user = request.getSession().getAttribute("LOGIN_USER");
            if (user == null) {
                response.sendRedirect("/login.jsp");
                System.out.println("尚未登录,跳到登录页面");
                return false;
            }
    
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("afterCompletion");
        }
    
    }

    spring-mvc.xml 配置文件:

      <mvc:interceptors>
            <mvc:interceptor>
                <!-- 拦截所有请求 -->
                <mvc:mapping path="/**"/> 
            <!-- 排除拦截的请求 -->
           <mvc:exclude-mapping path="/user/login.do"/>
           <bean class="com.dowave.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
      </mvc:interceptors>

    当 mvc:exclude-mapping 报错时,将 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 改成 3.2。

    到此,就完成拦截器了。如果JSP代码没放在 WEB-INF 目录下还需要增加对 jsp 文件的拦截,如下:

    增加登录过滤器 LoginFilter:

    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class LoginFilter implements Filter {
        public void destroy() {
    
        }
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
                throws ServletException, IOException {
            
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String currentURL = request.getRequestURI();
            String ctxPath = request.getContextPath();
            
            // 除掉项目名称时访问页面当前路径
            String targetURL = currentURL.substring(ctxPath.length());
            HttpSession session = request.getSession(false);
            
            // 对当前页面进行判断,如果当前页面不为登录页面
            if (!("/login.jsp".equals(targetURL))) {// 在不为登陆页面时,再进行判断,如果不是登陆页面也没有session则跳转到登录页面,
                if (session == null || session.getAttribute("LOGIN_USER") == null) {
                    response.sendRedirect("/login.jsp");
                    return;
                } else {
                    // 这里表示正确,会去寻找下一个链,如果不存在,则进行正常的页面跳转
                    filterChain.doFilter(request, response);
                    return;
                }
            } else {
                // 这里表示如果当前页面是登陆页面,跳转到登陆页面
                filterChain.doFilter(request, response);
                return;
            }
    
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
    }

    在 web.xml 增加:

       <!-- jsp拦截 -->
        <filter>
            <filter-name>LoginFilter</filter-name>
            <filter-class>com.dowave.interceptor.LoginFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>LoginFilter</filter-name>
            <!-- 这里表示对所有的以jsp后缀的文件有效,其它的无效 -->
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>

    O了,本文到此结束,喜欢收藏哦

  • 相关阅读:
    8.3学习日志
    8.2学习日志
    8.1学习日志
    Chapter 2
    未命名 1
    pugixml
    C++使用Json作为数据包装格式的通信
    项目FAQ
    xcode语法高亮插件
    【转】jsoncpp在xcode中的使用
  • 原文地址:https://www.cnblogs.com/linnuo/p/7717743.html
Copyright © 2020-2023  润新知