簡單的springMVC登錄攔截器

還在學習中,一個簡單的spring MVC 登錄攔截

spring配置如下:

 <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.test.intercept.InterceptDemo">
                <property name="allowuri">
                    <!--允許通過的url-->
                    <value>/login.html</value>
                </property>
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

如果有多個允許通過的請求時,可以使用list,用spring注入允許通過的uri這樣更靈活

java代碼如下:

package com.test.intercept;

import com.test.Userinfo;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * Created by haocongshun on 2017/2/25.
 */
public class InterceptDemo implements HandlerInterceptor {
    private static Logger logger = Logger.getLogger(InterceptDemo.class);
    private List<String> allowuri;
    /**
     * Handler執行之前調用這個方法,一般攔截在此處攔截
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * 是否允許通過@return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        String uri = httpServletRequest.getRequestURI();
//        if(uri.contains("/login.html")){
//            return true;
//        }
//        如果你有多可允許通過的uri可以使用list在Spring中配置,更加靈活
        for(String auri : allowuri){
            if(auri.contains(uri)){
                return true;
            }
        }
        //檢驗session中是否有你需要的屬性
        Userinfo userinfo = (Userinfo) httpServletRequest.getSession().getAttribute("userinfo");
        if(userinfo!=null){
            return true;
        }
        logger.info("被攔截的uri:"+uri);
        httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/admin/login.html");
        return false;
    }
    /**
     *Handler執行之後,ModelAndView返回之前調用這個方法
     */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }
    /**
     * Handler執行完成之後調用這個方法
     */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }

    public List getAllowuri() {
        return allowuri;
    }

    public void setAllowuri(List allowuri) {
        this.allowuri = allowuri;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        InterceptDemo.logger = logger;
    }
}

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 4681
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章