Pārlūkot izejas kodu

招商定制-新增浏览器请求鉴定功能

zhangqiankun 3 gadi atpakaļ
vecāks
revīzija
8bfd303360

+ 45 - 0
src/main/java/com/persagy/calendar/aop/UserAgentInterceptor.java

@@ -0,0 +1,45 @@
+package com.persagy.calendar.aop;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import com.persagy.common.exception.BusinessException;
+
+import cn.hutool.http.useragent.Browser;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 非浏览器请求直接拒绝
+ * 
+ * @version 1.0.0
+ * @company persagy 
+ * @author zhangqiankun
+ * @date 2022年3月21日 下午6:27:39
+ */
+@Slf4j
+@Component
+public class UserAgentInterceptor extends HandlerInterceptorAdapter {
+
+	@Value("${calendar.user.agent.browser:false}")
+	private boolean isUserAgent; 
+	
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		if (isUserAgent) {
+			UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
+			Browser browser = userAgent == null ? null : userAgent.getBrowser();
+			if (browser == null || "Unknown".equalsIgnoreCase(browser.getName())) {
+				log.error("不允许非浏览器请求");
+				throw new BusinessException("非法请求");
+			}
+		}
+		return super.preHandle(request, response, handler);
+	}
+	
+}

+ 36 - 0
src/main/java/com/persagy/calendar/config/WebMvcConfig.java

@@ -0,0 +1,36 @@
+package com.persagy.calendar.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import com.persagy.calendar.aop.UserAgentInterceptor;
+
+/**
+ * 
+ * @version 1.0.0
+ * @company persagy 
+ * @author zhangqiankun
+ * @date 2022年3月21日 下午6:30:44
+ */
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+	@Autowired
+	private UserAgentInterceptor userAgentInterceptor;
+	
+    public static final List<String> excludePaths = new ArrayList<String>();
+    static {
+    	excludePaths.add("/v2.0/common/handleParseCalendarRule/**");
+    }
+	
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(userAgentInterceptor).addPathPatterns("/**").excludePathPatterns(excludePaths);
+    }
+	
+}