JAVA全系列 教程
3762个小节阅读:7094k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
如果资源数量很多,一条条配置资源需要的权限效率较低。我们可以自定义访问控制逻辑,即访问资源时判断用户是否具有名为该资源URL的权限。
在配置文件中自定义访问控制逻辑
xxxxxxxxxx
// 权限拦截配置
http.authorizeHttpRequests(resp -> {
resp.requestMatchers("/login.html", "/fail.html").permitAll(); // 不需要认证的资源
resp.requestMatchers("/css/*.css", "/js/*.js", "/img/**").permitAll(); // 静态资源不需要认证
// resp.requestMatchers("/reportform/find").hasAnyAuthority("/reportform/find");
// resp.requestMatchers("/salary/find").hasAnyAuthority("/salary/find");
// resp.requestMatchers("/staff/find").hasAnyAuthority("/staff/find");
// resp.anyRequest().authenticated();//其余所有请求都需要认证
/**
* access的参数是一个函数式接口
* 方法的第一个参数代表认证对象,可以获取认证用户的权限集合
* 方法的第二个参数代表网络环境,可以获取当前请求的路径
*/
resp.anyRequest().access((authentication, requestContext) -> {
// 获取认证的用户权限
Collection<? extends GrantedAuthority> authorities = authentication.get().getAuthorities();
// 获取请求的URL路径
String uri = requestContext.getRequest().getRequestURI();
// 将URL路径封装为权限对象
SimpleGrantedAuthority authority = new SimpleGrantedAuthority(uri);
// 判断用户的权限集合是否包含请求的URL权限对象
boolean result = authorities.contains(authority);
return new AuthorizationDecision(result);
});
});