Commit 170f6d9a by 墨竹

fix:更改拦截器,删除无效拦截器

parent af04cee1
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
/**
* 好办登录信息
*
* @author mozhu
* @date 2021/12/14 17:37
*/
public class WellDoneLoginDTO implements Serializable {
private static final long serialVersionUID = -8035522410061849606L;
/**
* 员工id
*/
private String staffId;
/**
* wx企业id
*/
private String wxEnterpriseId;
/**
* 导购电话号码
*/
private String phoneNumber;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
...@@ -8,14 +8,6 @@ ...@@ -8,14 +8,6 @@
<bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/> <bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/>
<mvc:interceptor> <mvc:interceptor>
<mvc:mapping path="/**"/> <mvc:mapping path="/**"/>
<!--<mvc:exclude-mapping path="/login.json"/>-->
<!--<mvc:exclude-mapping path="/login-*"/>-->
<!--<mvc:exclude-mapping path="/gic-login*"/>-->
<!--<mvc:exclude-mapping path="/*test.json"/>-->
<!--<mvc:exclude-mapping path="/test/*"/>-->
<!--<mvc:exclude-mapping path="/pay/*"/>-->
<!--<mvc:exclude-mapping path="/login"/>-->
<!--<mvc:exclude-mapping path="/nationcode/get-nationcode-list"/>-->
<mvc:exclude-mapping path="/get-pic-code"/> <mvc:exclude-mapping path="/get-pic-code"/>
<mvc:exclude-mapping path="/phone-login"/> <mvc:exclude-mapping path="/phone-login"/>
<mvc:exclude-mapping path="/upload-file*"/> <mvc:exclude-mapping path="/upload-file*"/>
......
package com.gic.haoban.manage.web.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/**
* 访问限制
* 默认1秒
* @author hzw
*
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface HttpLimit {
long time() default 1L;
TimeUnit unit() default TimeUnit.SECONDS;
int times() default 2;
}
\ No newline at end of file
package com.gic.haoban.manage.web.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreLogin {
}
\ No newline at end of file
package com.gic.haoban.manage.web.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.web.anno.HttpLimit;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.redis.data.util.RedisUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试登录拦截器
*
* @author zhurz
*/
public class HttpLimitInterceptor extends HandlerInterceptorAdapter {
private static Logger logger = LoggerFactory.getLogger(HttpLimitInterceptor.class);
private void errorResult(HttpServletResponse httpServletResponse, HaoBanErrCode errCode) {
HaobanResponse response = new HaobanResponse();
response.setErrorCode(errCode.getCode());
response.setMessage(errCode.getMsg());
PrintWriter writer = null;
try {
httpServletResponse.setHeader("Content-type", "application/json;charset=UTF-8");
writer = httpServletResponse.getWriter();
writer.append(JSONObject.toJSONString(response));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String requestURI = httpServletRequest.getRequestURI();
logger.info("post-url:{}", requestURI);
Map<String, String[]> parameterMap = httpServletRequest.getParameterMap();
logger.info("post-params:{}", JSONObject.toJSONString(parameterMap));
if (!(o instanceof HandlerMethod)) {
return true;
}
HandlerMethod handler = (HandlerMethod) o;
HttpLimit httpLimit = handler.getMethodAnnotation(HttpLimit.class);
if (httpLimit != null) {
String ip = getIpAddress(httpServletRequest);
String url = httpServletRequest.getRequestURL().toString();
String key = "http_limit_".concat(url);
key = key + ip;
if(RedisUtil.getCache(key)!=null){
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_10008);
logger.info("过于频繁点击");
return false;
}else{
RedisUtil.setCache(key, 1, httpLimit.time());
}
}
return true;
}
private String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
package com.gic.haoban.manage.web.interceptor;
import com.gic.haoban.auth.api.dto.UserRightDetailDTO;
import com.gic.haoban.common.utils.AuthRequestUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试登录拦截器
*
* @author zhurz
*/
public class TestLoginInterceptor extends HandlerInterceptorAdapter {
private static Logger logger = LoggerFactory.getLogger(TestLoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
// 测试用
HttpServletRequest request = AuthRequestUtil.getRequest();
String testFlag = request.getHeader("testFlag");
if (!"Y".equals(testFlag)) return true;
String testEnterpriseId = request.getHeader("testEnterpriseId");
String testUserId = request.getHeader("testUserId");
UserRightDetailDTO sessionUser = new UserRightDetailDTO();
sessionUser.setUserId(testUserId);
sessionUser.setEnterpriseId(testEnterpriseId);
AuthRequestUtil.setSessionUser(sessionUser);
return true;
}
}
package com.gic.haoban.manage.web.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.api.dto.LoginDTO;
import com.gic.haoban.manage.web.anno.IgnoreLogin;
import com.gic.haoban.manage.web.auth.AuthRequestUtil;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.redis.data.util.GicRateLimiter;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
/**
* Created 2018/7/20.
*
* @author hua
*/
public class WebInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(WebInterceptor.class);
private static final String MOUDLE = "haoban-manage3-web";
private void errorResult(HttpServletResponse httpServletResponse, HaoBanErrCode errCode) {
HaobanResponse response = new HaobanResponse();
response.setErrorCode(errCode.getCode());
response.setMessage(errCode.getMsg());
PrintWriter writer = null;
try {
httpServletResponse.setHeader("Content-type", "application/json;charset=UTF-8");
writer = httpServletResponse.getWriter();
writer.append(JSONObject.toJSONString(response));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String requestURI = httpServletRequest.getRequestURI();
logger.info("post-url:{}", requestURI);
Map<String, String[]> parameterMap = httpServletRequest.getParameterMap();
logger.info("post-params:{}", JSONObject.toJSONString(parameterMap));
if (!(o instanceof HandlerMethod)) {
return true;
}
HandlerMethod handler = (HandlerMethod) o;
IgnoreLogin ignoreLogin = handler.getMethodAnnotation(IgnoreLogin.class);
if (null != ignoreLogin) {
return true;
}
Cookie[] cookies = AuthRequestUtil.getRequest().getCookies();
String token = "";
if(cookies != null){
for (Cookie cookie : cookies) {
if(cookie.getName().equals("token")){
token = cookie.getValue();
}
}
}
LoginDTO loginUser = (LoginDTO) AuthRequestUtil.getAppLoginUser(token);
if (loginUser == null) {
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_4);
logger.info("用户不存在!");
return false;
}
HandlerMethod method = null;
if (o instanceof HandlerMethod) {
method = (HandlerMethod) (o);
}
if (method == null) {
return true;
}
if (StringUtils.isNotBlank(loginUser.getWxEnterpriseId())) {
httpServletRequest.setAttribute("wxEnterpriseId", loginUser.getWxEnterpriseId());
}
if (loginUser.getStaffDTO() != null) {
httpServletRequest.setAttribute("staffDTO", loginUser.getStaffDTO());
}
String wxEnterpriseId = loginUser.getWxEnterpriseId();
GicRateLimiter instance = GicRateLimiter.getInstance(MOUDLE);
Long acquire = instance.acquire(requestURI, wxEnterpriseId);
logger.info("限流返回值:{},{}",requestURI,acquire);
if (acquire==0L) {
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_13);
logger.info("限流!");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
logger.info("end");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
logger.info("end");
}
}
...@@ -3,10 +3,9 @@ ...@@ -3,10 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:interceptors> <mvc:interceptors>
<bean class="com.gic.haoban.common.interceptor.CORSInterceptor"/> <bean class="com.gic.haoban.common.interceptor.HttpLimitInterceptor"/>
<bean class="com.gic.commons.interceptor.HeaderTagInterceptor"/> <bean class="com.gic.commons.interceptor.HeaderTagInterceptor"/>
<bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/> <bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/>
<bean class="com.gic.haoban.manage.web.interceptor.HttpLimitInterceptor"/>
<mvc:interceptor> <mvc:interceptor>
<mvc:mapping path="/**"/> <mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login.json"/> <mvc:exclude-mapping path="/login.json"/>
...@@ -23,7 +22,7 @@ ...@@ -23,7 +22,7 @@
<mvc:exclude-mapping path="/upload-file*"/> <mvc:exclude-mapping path="/upload-file*"/>
<mvc:exclude-mapping path="/upload-file-voice"/> <mvc:exclude-mapping path="/upload-file-voice"/>
<mvc:exclude-mapping path="/get-login-qrcode"/> <mvc:exclude-mapping path="/get-login-qrcode"/>
<bean class="com.gic.haoban.manage.web.interceptor.WebInterceptor"/> <bean class="com.gic.haoban.common.interceptor.AuthWebInterceptor"/>
</mvc:interceptor> </mvc:interceptor>
</mvc:interceptors> </mvc:interceptors>
......
package com.gic.haoban.manage.web.controller; package com.gic.haoban.manage.web.controller;
import com.gic.haoban.auth.api.dto.DisplayRelationShortInfoDTO; import com.gic.haoban.auth.api.dto.DisplayRelationShortInfoDTO;
import com.gic.haoban.base.api.common.pojo.dto.WellDoneLoginDTO;
import com.gic.haoban.common.utils.AuthRequestWellDoneUtil; import com.gic.haoban.common.utils.AuthRequestWellDoneUtil;
import com.gic.haoban.common.utils.HaobanResponse; import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.api.dto.WellDoneLoginDTO;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
......
...@@ -15,6 +15,7 @@ import com.gic.enterprise.api.dto.StoreDTO; ...@@ -15,6 +15,7 @@ import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.app.customer.dto.StaffOpenRelatedDTO; import com.gic.haoban.app.customer.dto.StaffOpenRelatedDTO;
import com.gic.haoban.app.customer.service.api.service.StaffMemberRelationApiService; import com.gic.haoban.app.customer.service.api.service.StaffMemberRelationApiService;
import com.gic.haoban.base.api.common.pojo.dto.WellDoneLoginDTO;
import com.gic.haoban.common.anno.IgnoreLogin; import com.gic.haoban.common.anno.IgnoreLogin;
import com.gic.haoban.common.utils.AuthRequestWellDoneUtil; import com.gic.haoban.common.utils.AuthRequestWellDoneUtil;
import com.gic.haoban.common.utils.EntityUtil; import com.gic.haoban.common.utils.EntityUtil;
......
package com.gic.haoban.manage.web.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.common.anno.HttpLimit;
import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.utils.IPAddressUtil;
import com.gic.redis.data.util.RedisUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
/**
* 测试登录拦截器
*
* @author zhurz
*/
public class HttpLimitInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(HttpLimitInterceptor.class);
private void errorResult(HttpServletResponse httpServletResponse, HaoBanErrCode errCode) {
HaobanResponse response = new HaobanResponse();
response.setErrorCode(errCode.getCode());
response.setMessage(errCode.getMsg());
PrintWriter writer = null;
try {
httpServletResponse.setHeader("Content-type", "application/json;charset=UTF-8");
writer = httpServletResponse.getWriter();
writer.append(JSONObject.toJSONString(response));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String requestURI = httpServletRequest.getRequestURI();
logger.info("post-url:{}", requestURI);
Map<String, String[]> parameterMap = httpServletRequest.getParameterMap();
logger.info("post-params:{}", JSONObject.toJSONString(parameterMap));
if (!(o instanceof HandlerMethod)) {
return true;
}
HandlerMethod handler = (HandlerMethod) o;
HttpLimit httpLimit = handler.getMethodAnnotation(HttpLimit.class);
if (httpLimit != null) {
String ip = IPAddressUtil.getIpAddress(httpServletRequest);
String url = httpServletRequest.getRequestURL().toString();
String key = "http_limit_".concat(url);
key = key + ip;
if(RedisUtil.getCache(key)!=null){
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_10008);
logger.info("过于频繁点击");
return false;
}else{
RedisUtil.setCache(key, 1, httpLimit.time());
}
}
return true;
}
}
package com.gic.haoban.manage.web.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.common.anno.IgnoreLogin;
import com.gic.haoban.common.utils.AuthRequestWellDoneUtil;
import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.api.dto.WellDoneLoginDTO;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.redis.data.util.GicRateLimiter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
/**
* Created 2018/7/20.
*
* @author hua
*/
public class MobileWebInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(MobileWebInterceptor.class);
private static final String MOUDLE = "haoban-manage3-wx";
private void errorResult(HttpServletResponse httpServletResponse, HaoBanErrCode errCode) {
HaobanResponse response = new HaobanResponse();
response.setErrorCode(errCode.getCode());
response.setMessage(errCode.getMsg());
PrintWriter writer = null;
try {
httpServletResponse.setHeader("Content-type", "application/json;charset=UTF-8");
writer = httpServletResponse.getWriter();
writer.append(JSONObject.toJSONString(response));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String requestURI = httpServletRequest.getRequestURI();
logger.info("post-url:{}", requestURI);
Map<String, String[]> parameterMap = httpServletRequest.getParameterMap();
logger.info("post-params:{}", JSONObject.toJSONString(parameterMap));
HandlerMethod handler = (HandlerMethod) o;
IgnoreLogin ignoreLogin = handler.getMethodAnnotation(IgnoreLogin.class);
if (null != ignoreLogin) {
return true;
}
if (true) {
return true;
}
WellDoneLoginDTO wellDoneLoginDTO = (WellDoneLoginDTO) AuthRequestWellDoneUtil.getLoginUser();
if (wellDoneLoginDTO == null) {
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_30009);
logger.info("用户不存在!");
return false;
}
String wxEnterpriseId = wellDoneLoginDTO.getWxEnterpriseId();
GicRateLimiter instance = GicRateLimiter.getInstance(MOUDLE);
Long acquire = instance.acquire(requestURI, wxEnterpriseId);
logger.info("限流返回值:{},{}", requestURI, acquire);
if (acquire == 0L) {
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_13);
logger.info("wxEnterpriseId:{},限流!", wxEnterpriseId);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
logger.info("end");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
logger.info("end");
}
}
...@@ -3,10 +3,9 @@ ...@@ -3,10 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:interceptors> <mvc:interceptors>
<bean class="com.gic.haoban.common.interceptor.CORSInterceptor"/> <bean class="com.gic.haoban.common.interceptor.HttpLimitInterceptor"/>
<bean class="com.gic.commons.interceptor.HeaderTagInterceptor"/> <bean class="com.gic.commons.interceptor.HeaderTagInterceptor"/>
<bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/> <bean class="com.gic.haoban.common.ext.PropertyViewClearInterceptor"/>
<bean class="com.gic.haoban.manage.web.interceptor.HttpLimitInterceptor"/>
<mvc:interceptor> <mvc:interceptor>
<mvc:mapping path="/**"/> <mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login.json"/> <mvc:exclude-mapping path="/login.json"/>
...@@ -20,7 +19,7 @@ ...@@ -20,7 +19,7 @@
<mvc:exclude-mapping path="/phone-login"/> <mvc:exclude-mapping path="/phone-login"/>
<mvc:exclude-mapping path="/upload-file*"/> <mvc:exclude-mapping path="/upload-file*"/>
<mvc:exclude-mapping path="/upload-file-voice"/> <mvc:exclude-mapping path="/upload-file-voice"/>
<bean class="com.gic.haoban.manage.web.interceptor.MobileWebInterceptor"/> <bean class="com.gic.haoban.common.interceptor.AuthMobileWebInterceptor"/>
</mvc:interceptor> </mvc:interceptor>
</mvc:interceptors> </mvc:interceptors>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment