Sping攔截器配置例外路徑
阿新 • • 發佈:2019-01-25
思路:通過全域性引數,選擇性的跳過攔截器邏輯。
web.xml中配置:
<!-- 攔截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 對所有的請求攔截使用/** ,對某個模組下的請求攔截使用:/myPath/* --> <mvc:mapping path="/**" /> <ref bean="userAccessInterceptor" /> </mvc:interceptor> </mvc:interceptors> <bean id="userAccessInterceptor" class="com.kye.interceptor.UserAccessApiInterceptor"> <span style="color:#FF0000;"><property name="unUAInterLists" > <list> <value>/S/*</value> </list> </property></span> </bean> <!-- 解密攔截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 對登入的請求攔截 /Login--> <mvc:mapping path="/S/*" /> <ref bean="userSecurity" /> </mvc:interceptor> </mvc:interceptors> <bean id="userSecurity" class="com.kye.interceptor.UserSecurity"> </bean>
在原始攔截器中增加實體類的全域性引數;對例外的路徑增加攔截器。
UserAccessApiInterceptor類中增加例外的跳出邏輯:
public class UserAccessApiInterceptor extends HandlerInterceptorAdapter{ private Logger log = Logger.getLogger(this.getClass()); /** * 免登入 免檢查地址 */ private List<String> unUAInterLists; public List<String> getUnUAInterLists() { return unUAInterLists; } public void setUnUAInterLists(List<String> unUAInterLists) { this.unUAInterLists = unUAInterLists; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 20160511 增加例外地址,例外地址跳出 String servletPath = request.getRequestURI(); for (String string : unUAInterLists) { // 如果存在 後方的萬用字元,那麼匹配地址的前部分 int beginId = string.indexOf(SecurityUtil.WIL_CHAR); if (beginId >= 0 && servletPath.startsWith(request.getContextPath() + string.substring(0, beginId))) { return true; } } /** 攔截邏輯 */ return true; } }
例外連結的攔截器正常邏輯即可。