溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

springboot 攔截器與servlet的過濾器

發(fā)布時間:2020-07-16 07:28:21 來源:網(wǎng)絡(luò) 閱讀:536 作者:lifeneedyou 欄目:編程語言
springboot 是spring框架的二次升華,簡化了配置,提高了開發(fā)效率。攔截器是spring 提供的基于AOP思想的實現(xiàn)。過濾器filter是servlet的API,比較依賴servlet,他們有不同也有一些相似的地方。
1Filter基于servlet ,主要用于servlet存在的環(huán)境。攔截器用于servlet,也可以用于其他環(huán)境中。
2Filter是servlet規(guī)范來提供支持,攔截器是spring框架來提供支持。
3Filter的使用主要在servlet的前后,攔截器可以深入到每個角落。
時使用攔截器?何時使用過濾器?
1如果是非spring項目,那么不能攔截器,只能用過濾器。
2 如果是處理controller前后,既可以使用攔截器也可以使用過濾器。
下面是springboot里面實現(xiàn)filter的例子
      // 注入spring容器

@Component
// 定義filterName 和過濾的url
@WebFilter(filterName = "my2Filter" ,urlPatterns = "/*")
public class My2Filter implements Filter {@Override
br/>@Override

}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("filter2");
}
@Override
public void destroy() {

}

}

接下來實現(xiàn)一個springboot里面的攔截器的例子。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new GlobalInterceptor()).addPathPatterns("/**");
}

}

import cn.vcinema.tool.security.session.SessionValidateResultEnum;
import cn.vcinema.tool.security.session.UserSessionInfo;
import cn.vcinema.tool.security.session.UserSessionUtils;
import com.pumpkin.conf.MallConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GlobalInterceptor implements HandlerInterceptor {

private final static Logger LOGGER = LoggerFactory.getLogger(GlobalInterceptor.class);

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String userId = request.getHeader("user_id");
    String sessionId = request.getHeader("session_id");
    String deviceId = request.getHeader("device_id");
    LOGGER.info("headers:user_id=" + userId + ",session_id=" + sessionId + ",device_id=" + deviceId);
    UserSessionInfo info = new UserSessionInfo(userId, sessionId, deviceId);
    SessionValidateResultEnum resultEnum = UserSessionUtils.validateSession(MallConfig.getRunMode(), info);

    return true;
}

}

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI