Commit 72827449 authored by zhouxudong's avatar zhouxudong

反扒

parent 0f3b7bbf
......@@ -182,6 +182,33 @@
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--反扒-->
<dependency>
<groupId>cn.keking.project</groupId>
<artifactId>kk-anti-reptile</artifactId>
<version>1.0.0-RELEASE</version>
<scope>system</scope>
<systemPath>${project.basedir}/jar/kk-anti-reptile-1.0.0-RELEASE.jar</systemPath>
</dependency>
<!-- User-Agent库 反扒使用-->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<!--反扒使用-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--反扒 需要redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.17.5</version>
</dependency>
</dependencies>
<build>
......@@ -190,6 +217,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
</plugin>
......
......@@ -48,7 +48,7 @@ public class ResourceConfig implements WebMvcConfigurer {
String[] excludeUrl = new String[]{"/demo/login","/login/login","/weixin/login",
"/parkInfo/list",
"/developmentInfo/list","/megalopolisInfo/list",
"/treeInfo/**","/homePage/**","/sysFile/**","/api/sysDictData/**"};
"/treeInfo/**","/homePage/**","/sysFile/**","/api/sysDictData/**","/kk-anti-reptile/**"};
String[] excludePatterns = (String[]) ArrayUtils.addAll(excludeSwagger, excludeUrl);
System.out.println("自定义拦截器#############################################");
......
package com.lyy.admin.common.filter;
import cn.hutool.json.JSONUtil;
import com.lyy.admin.common.utils.AjaxResult;
import com.lyy.admin.common.utils.BusinessService;
import com.lyy.admin.common.utils.IpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @Author:zhouxudong
*
* @version: 1.0 @Date: 2023/12/14 18:35 @Description: 微信登录授权过滤器
*/
@Component
@Slf4j
@Order(-1)
public class ForwardFilter implements Filter {
@Autowired
private BusinessService businessService;
@Override
public void doFilter(
ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestURI = request.getRequestURI();
String getRequest = request.getRequestURL().toString();
if (!requestURI.contains("/forward/test")) {
filterChain.doFilter(request, response);
return;
}
String replace = getRequest.replace(requestURI, "");
//request.getRequestDispatcher("/kk-anti-reptile/validate/").forward(request,response);
String verifyId = request.getParameter("verifyId");
String realRequestUri = request.getParameter("realRequestUri");
String result = request.getParameter("result");
MultiValueMap<String,String> params=new LinkedMultiValueMap<>();
params.put("verifyId", Collections.singletonList(verifyId));
params.put("realRequestUri", Collections.singletonList(realRequestUri));
params.put("result", Collections.singletonList(result));
try{
String forward = businessService.forward(params,replace);
Map map = JSONUtil.toBean(forward, Map.class);
this.loginSuccessHandler(response, map);
}catch (Exception e){
this.loginFailHandler(response, "验证码有误");
}
//this.loginFailHandler(response, "获取用户openid失败");
}
private void loginSuccessHandler(HttpServletResponse response, Object data) throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
AjaxResult result = new AjaxResult(HttpServletResponse.SC_OK, null, data);
this.printWriter(response, result);
}
private void loginFailHandler(HttpServletResponse response, String exception) throws IOException {
response.setStatus(509);
AjaxResult result = new AjaxResult(509, exception, null);
this.printWriter(response, result);
}
private void printWriter(HttpServletResponse response, AjaxResult ajaxResult) throws IOException {
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.write(JSONUtil.toJsonStr(ajaxResult));
out.flush();
out.close();
}
}
package com.lyy.admin.common.redis;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author:zhouxudong
* @version: 1.0
* @Date: 2023/12/25 11:43
* @Description: redisson 配置
*/
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String address;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private int dataBase;
@Bean
public RedissonClient redissonClient(){
// 创建配置 指定redis地址及节点信息
Config config = new Config();
config.useSingleServer().setAddress("redis://"+address+":"+port).setPassword(password).setDatabase(dataBase);
// 根据config创建出RedissonClient实例
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
}
......@@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
......@@ -44,7 +46,18 @@ public class BusinessService {
log.info("注册保存线索信息:参数:{},结果:{}", params, JSONUtil.toJsonStr(block));
return block;
}
public String forward(MultiValueMap<String,String> params,String url) {
String block =
this.webClient
.post()
.uri(url+"/lyy/kk-anti-reptile/validate/").contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromMultipartData(params))
.retrieve()
.bodyToMono(String.class)
.block();
log.info("注册保存线索信息:参数:{},结果:{}", params, JSONUtil.toJsonStr(block));
return block;
}
/**
* @description: 返回格式 116.225202,39.897665
* @date: 2023/12/17 15:56
......
......@@ -102,3 +102,35 @@ liyeren:
whiteIp: 120.46.86.157
#立业人加密密钥
key: a5gcCE1MV4j2W9x7
#反爬虫设置
anti:
reptile:
manager:
#是否启用反爬虫插件
enabled: true
#局部拦截时,需要反爬的接口列表,以','分隔,支持正则匹配。全局拦截模式下无需配置
include-urls: ^${server.servlet.context-path}/.*$
#是否启用 IP Rule
ip-rule:
enabled: true
#单个时间窗口内,最大请求数
request-max-size: 20
#时间窗口长度(ms)
expiration-time: 5000
#命中规则后自动解除时间(单位:s) moren
# lock-expire: 10000
#IP 白名单,支持后缀'*'通配,以','分隔
ignore-ip: ${liyeren.whiteIp}
ua-rule:
enabled: true
# 是否允许 Linux 系统访问
#allowed-linux :
# 是否允许移动端设备访问
allowed-mobile: true
# 是否允许移 PC 设备访问
allowed-pc: true
#是否允许物联网设备访问
#allowed-iot:
#是否允许代理访问
# allowed-proxy: true
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