只是个人意见。 你把黑名单存在数据库。记得加一个时间。 然后 写一个定时器 比如每天执行一次 这个定时器去数据库查询 比如查询5小时之前的所有黑名单自动删除。 这是一种办法。 其次是你在生存黑名单也就是往数据库存储数据的时候就启动一个线程。让其延迟比如5小时在折行 折行的内容为删除刚才的ip。这只是思路。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、虚拟主机、营销软件、网站建设、陇西网站维护、网站推广。

lovenuo1314 
码龄11年
关注
1、若依后端gateway模块配置白名单
顾名思义,就是允许访问的地址。且无需登录就能访问。在ignore中设置whites,表示允许匿名访问。
1.1、在nacos中gateway配置文件中配置

1.2、代码
package com.ruoyi.gateway.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.TokenConstants;
import com.ruoyi.common.core.utils.JwtUtils;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties;
import io.jsonwebtoken.Claims;
import reactor.core.publisher.Mono;
/**
* 网关鉴权
*
* @author ruoyi
*/
@Component
public class AuthFilter implements GlobalFilter, Ordered
{
private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
// 排除过滤的 uri 地址,nacos自行添加
@Autowired
private IgnoreWhiteProperties ignoreWhite;
@Autowired
private RedisService redisService;
@Override
public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain)
{
ServerHttpRequest request = exchange.getRequest();
ServerHttpRequest.Builder mutate = request.mutate();
String url = request.getURI().getPath();
// 跳过不需要验证的路径
if (StringUtils.matches(url, ignoreWhite.getWhites()))
{
return chain.filter(exchange);
}
String token = getToken(request);
if (StringUtils.isEmpty(token))
{
return unauthorizedResponse(exchange, "令牌不能为空");
}
Claims claims = JwtUtils.parseToken(token);
if (claims == null)
{
return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
}
String userkey = JwtUtils.getUserKey(claims);
boolean islogin = redisService.hasKey(getTokenKey(userkey));
if (!islogin)
{
return unauthorizedResponse(exchange, "登录状态已过期");
}
String userid = JwtUtils.getUserId(claims);
String username = JwtUtils.getUserName(claims);
if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
{
return unauthorizedResponse(exchange, "令牌验证失败");
}
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
// 内部请求来源参数清除
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
}
private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value)
{
if (value == null)
{
return;
}
String valueStr = value.toString();
String valueEncode = ServletUtils.urlEncode(valueStr);
mutate.header(name, valueEncode);
}
private void removeHeader(ServerHttpRequest.Builder mutate, String name)
{
mutate.headers(httpHeaders - httpHeaders.remove(name)).build();
}
private MonoVoid unauthorizedResponse(ServerWebExchange exchange, String msg)
{
log.error("[鉴权异常处理]请求路径:{}", exchange.getRequest().getPath());
return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
}
/**
* 获取缓存key
*/
private String getTokenKey(String token)
{
return CacheConstants.LOGIN_TOKEN_KEY + token;
}
/**
* 获取请求token
*/
private String getToken(ServerHttpRequest request)
{
String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION);
// 如果前端设置了令牌前缀,则裁剪掉前缀
if (StringUtils.isNotEmpty(token) token.startsWith(TokenConstants.PREFIX))
{
token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY);
}
return token;
}
@Override
public int getOrder()
{
return -200;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.ruoyi.gateway.config.properties;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* 放行白名单配置
*
* @author ruoyi
*/
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "security.ignore")
public class IgnoreWhiteProperties
{
/**
* 放行白名单配置,网关不校验此处的白名单
*/
private ListString whites = new ArrayList();
public ListString getWhites()
{
return whites;
}
public void setWhites(ListString whites)
{
this.whites = whites;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
启动代码并测试

已经走到了sytem模块中,并且没有进行登录;说明我们的配置已经生效
文章知识点与官方知识档案匹配
Java技能树首页概览
84637 人正在系统学习中
打开CSDN,阅读体验更佳
Amazon API Gateway使用IP白名单控制后端服务访问_亚林瓜子的博客-CSD...
异地IP验证 使用移动IP调用,请求被拒绝了。 白名单IP验证 同样的请求,在白名单中的IP就可以正常请求。 总结 这里使用的AWS中国北京地区的API Gateway服务,通过策略控制对后台服务的访问控制。
SpringCloud Gateway网关配置(二)接口访问IP白名单配置(真实IP)
SpringCloud Gateway网关配置中,需要对访问的IP设置白名单,SpringCloud Gateway官方给出YML配置文件配置。 如下: 5.10. The RemoteAddr Route Predicate Factory The RemoteAddr route predicate factory takes a list (min size 1) of so...
Spring Cloud Gateway 网关实现白名单功能
对于微服务后台而言,网关层作为所有网络请求的入口。一般基于安全考虑,会在网关层做权限认证,但是对于一些例如登录、注册等接口以及一些资源数据,这些是不需要有认证信息,因此需要在网关层设计一个白名单的功能。本文将基于 Spring Cloud Gateway 2.X 实现白名单功能。注意事项: Gateway 网关层的白名单实现原理是在过滤器内判断请求地址是否符合白名单,如果通过则跳过当前过滤器。如果有多个过滤器,则需要在每一个过滤器里边添加白名单判断。......
继续访问
若依vue分离版(ruoyi-vue)跳过token验证,设置白名单
找到SecurityConfig类的configure方法 如图所示 在设置白名单后还需要把接口上的权限标识符去掉。然后需要重启一下项目,热加载不行,会报错。
继续访问

Kong Gateway - 13 基于网关服务的IP白名单限制访问(Whitelist IP Restri...
为名称为book的服务的路由{route_id启用IP白名单限制访问其中192.168.10.50表示限制macOS系统这一台计算机不能访问book服务的路由其中192.168.43.0/24表示限制IP地址是192.168.43这一整个网段的IP都不能访问book服务的路由(Windows 10在此...
服务网关:Gateway_青铜造白的博客
可以实现日志拦截、权限控制、解决跨域、限流、熔断、负载均衡,隐藏服务端的ip,黑名单与白名单拦截、授权等。 二:gateway的核心概念 1、Route(路由):就是转发规则 Spring Cloud Gateway的基础元素,可简单理解成一条转发的规则。包含:ID...
SpringCloud Gateway网关配置(二)接口访问IP白名单配置(真实IP)
SpringCloud Gateway网关配置中,需要对访问的IP设置白名单,SpringCloud Gateway官方给出YML配置文件配置。 如下: 5.10. The RemoteAddr Route Predicate Factory The RemoteAddr route predicate factory takes a list (min size 1) of sources, which are CIDR-notation (IPv4 or IPv6) strings, such as 1
继续访问
nacos权限认证(二) 开启权限认证
直接设置下述属性为true,就可以避免 nacos权限认证(一) 中的问题。 这个时候再访问nacos页面,则会直接报错。因此,还需要再设置两个属性(数值可以随便填)。添加好这两个属性时页面就能正常访问了。注意:如果你遇到这种情况,只需要关闭提示,点击用户名,登出,然后重新登录即可。这个时候,如果你加修改直接启动其他服务,则其他服务无法正常连接nacos,也需要坐一番配置。需要再其他服务的配置文件中加上如下配置。 这样,其他服务就能正常连接nacos了。至此,nacos的权限漏洞问题就解决了。
继续访问

若依RuoYi-Cloud代码学习三---ruoyi-gateway扩展gateway网关组件的知识
一、API 网关概述 作为微服务的门面,应用于服务数量众多、复杂度较高、规模比较大的系统。 优点: 客户端通过 API 网关与微服务交互时,客户端只需要知道 API 网关地址即可,而不需要维护大量的服务地址,简化了客户端的开发。 客户端直接与 API 网关通信,能够减少客户端与各个服务的交互次数。 客户端与后端的服务耦合度降低。 节省流量,提高性能,提升用户体验。 API 网关还提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能。 常见API 网关实现方案 Spring Cloud G
继续访问
热门推荐 GateWay中添加白名单
最近开发中有一个鉴权的操作,最后需要进行添加白名单的,废话不多说,直接上代码吧, 这是我的项目结构 applicaton启动类: import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; import org.spr...
继续访问

Spring Gateway+白名单+docker
域名解析 从物理机上调用外部服务正常,但是docker里的java服务去调用却有问题。 答案 docker并不能使用宿主机的host配置信息 为每一个http请求定制header 如果在RouteLocatorBuilder里设置header的话就会对所有http request生效,如果为了对每个request请求使用不同header需要如下设置 @Configuration public cl...
继续访问
GateWay网关应用案例(跨域、限流、黑白名单)
Spring Cloud Gateway是基于Spring Boot 2.x,Spring WebFlux和Project Reactor 构建的。属于异步非阻塞架构 Spring Cloud Gateway与Spring Data 和Spring Securit 技术不能同时使用 Spring Cloud Gateway基于Spring Boot和Spring Webflux提供的Netty运行。它在传统的Servlet容器中或用WAR的方式构建时不起作用 网关基本的功能 :鉴权、流量控制、熔断、路径重写
继续访问

ruoyi分离版前端白名单
ruoyi分离版前端白名单 先在router下的index.js中加上需要添加的路由 之后再permission.js下的whiteList中加上上面添加的路由就可以了 后端的接口 接口白名单 /**是匹配路径下的所有接口,也可以直接指定某一个具体的接口 ...
继续访问
若依后端gateway模块解决跨域问题
跨域问题
继续访问

微服务项目在gateway网关配置路径访问白名单
网关的鉴权:权限身份认证作用实际上就是由一串组合起来的过滤器实现的, 过滤器的自定义过程就是实现两个接口org.springframework.cloud.gateway.filter.GlobalFilter和org.springframework.core.Ordered 通过重写org.springframework.cloud.gateway.filter.GlobalFilter中的filter方法来定义过滤的逻辑 通过重写org.springframework.core.Ordered中的get
继续访问
若依微服务SpringCloud—使用Spring Cloud Gateway网关
一.API网关 API网关,就是指系统的统一入口,它封装来应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证,鉴权,监控,路由转发等等。 二.业界流行的网关 (1)Ngnix+lua :使用nginx的反向代理和负载均衡可实现api服务器的负载均衡及高可用。lua是一种脚步语言,可以来编写一些简单的nginx支持lua脚本。 (2)Kong:基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流,鉴权等等)可以开箱即用。缺点:只支持http协
继续访问

最新发布 若依前后端分离ruoyi-vue请求添加白名单403
【代码】若依前后端分离ruoyi-vue请求添加白名单403。
继续访问

Nacos配置与踩坑总结
核心问题: 1.不同域名,走不同配置 2.开关、配置、JSON三种配置类型 解决方案 设计思路: 1.分三大类: 业务配置、域名配置、域名自定义配置 业务配置:用于配置所有业务中的配置信息 针对业务情况,分为三类业务配置:开关配置、基础配置、数据配置(黑/白名单) 每种配置都为单独的nacos 针对大促情况:将三类配置各自再两个环境配置,共三个环境配置,方便在不同配置环境中自由切换 域名配置:用于配置域名走哪个配置环境,实现出现问题快速将某域名切换到不同环境 域
继续访问

微服务网关springcloud gateway自定义全局过滤器
微服务网关springcloud gateway自定义全局过滤器
继续访问
ruoyi-spring boot 升级为nacos配置
springboot集成nacos
继续访问
若依Cloud之旅(二):一次登录到出现界面,若依做了什么?
若依一次登录到出现界面的三个接口都做了什么
继续访问

实现登录验证
最近练习搭建了一个后台管理系统,首先第一步做了关于验证登录的功能.以下项目使用了Nacos作为服务发现和注册中心,将Auth和gateway,system等相关多个微服务注册进Nacos.每次刷新登录页面,就会获取新的验证码(,输入正确的验证码即可成功跳转至首页. 获取验证码url: - dev-api是前端设置的反向代理,实际访问的是网关路径和端口.即在网关gateway模块做了路由转发.返回给前端 /** * 路由转发...
继续访问
若依前后端分离-免登录
项目需要对若依进行不输入账号密码的登录,所以临时进行修改,增加获取不到token时,判断是否携带了某个特殊参数,有就用默认的账号密码调用登录达到验证登录的需求。 // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 next() } else if (to.query.index === '1') { let..
继续访问

gateway白名单
gateway
java软件没有来电黑名单或者来电归属地之类的软件,java不能控制诺基亚手机的来电部分,因为系统本身没有提供这种接口。
所以不用费心思找了。
新版的QQ 是用树实现的...
然后每个子结点是 好友..
老版的QQ 具体也不清楚
如果让我做 可以用JButton+JTable实现 或者JButton+JTree
不过我觉得 还是完全用树比较简单
你可以参照下 QQ 2009 PRE版
两种方法。
一种是建一张黑名单表,对用户进行黑名单操作之后往表中添加数据。用户登录时查询这张表,存在就不允许登录什么的,这得看具体需求。
第二种是给用户表添加一个字段来表示用户状态,进行拉黑操作时更改该自段的值。
java代码中设置白名单可以用命令,对白名单的内容进行放行。而黑名单中的内容,可以用命令,让其停止运行。