当前位置: 首页 > news >正文

鸣蝉网站建设公司顺德建设局网站

鸣蝉网站建设公司,顺德建设局网站,甘肃庆阳网红排名,电子商务网站开发背景意义文章目录 使用内置的权限表达式PreAuthorizePermissionEvaluator 自定义权限表达式SysMethodSecurityExpressionHandler源码流程 SysMethodSecurityExpressionRoot 使用内置的权限表达式 PreAuthorize 这个用来判断超级管理员的话#xff0c;还得在表达式上加上或 Permissi… 文章目录 使用内置的权限表达式PreAuthorizePermissionEvaluator 自定义权限表达式SysMethodSecurityExpressionHandler源码流程 SysMethodSecurityExpressionRoot 使用内置的权限表达式 PreAuthorize 这个用来判断超级管理员的话还得在表达式上加上或 PermissionEvaluator 本来是想定义一个 PermissionEvaluator但是发现写表达式的时候还得弄2个参数PreAuthorize(‘/admin/user/list’,‘user:list’)有点麻烦 package com.zzhua.blog.config.security.auth;import org.springframework.security.access.PermissionEvaluator; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component;import java.io.Serializable;// GlobalMethodSecurityConfiguration 在 afterSingletonsInstantiated 方法中,// 会去容器中寻找 PermissionEvaluator 的bean, 设置到 defaultMethodExpressionHandler 中,// 并且定义了一个 PreInvocationAuthorizationAdvice 的bean, 将刚刚的设置到 defaultMethodExpressionHandler 设置给了这个Advice,//// GlobalMethodSecurityConfiguration 并且定义了aop中的 methodSecurityInterceptor(),会去创建访问决策管理器,// 访问决策管理器会去添加投票器里面会创建一个 PreInvocationAuthorizationAdviceVoter, 里面会传入上面定义的Advice,//// 所以接下来的流程看这个拦截器就行了同时也离不开 MethodSecurityMetadataSourceAdvisor 切面的支持 因此方法鉴权就是基于Aop的实现,// 用法参考SpringBoot 整合SpringSecurity示例实现前后分离权限注解JWT登录认证-https://juejin.cn/post/6844903974546456590#heading-4 Component public class CustomPermissionEvaluator implements PermissionEvaluator {Overridepublic boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {return false;}Overridepublic boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {return false;} }自定义权限表达式 也可以采用若依的方法自定义权限表达式其实就是利用了el表达式但是通过自定义权限表达式的过程可以更加清楚security处理方法注解权限时的整个处理过程我们也可以在这里扩展一些权限通配符匹配的功能 SysMethodSecurityExpressionHandler 可参考如何在 Spring Security 中自定义权限表达式 源码流程 此handler 将会被注入到 GlobalMethodSecurityConfiguration#setMethodSecurityExpressionHandler 作为 handler GlobalMethodSecurityConfiguration 定义了一个 PreInvocationAuthorizationAdvice 的bean, 获取并设置了上面定义的 handler GlobalMethodSecurityConfiguration 并且定义了aop中的 methodSecurityInterceptor()拦截器,会去创建访问决策管理器 访问决策管理器会去添加投票器当然不止这一种投票器会创建一个 PreInvocationAuthorizationAdviceVoter, 里面会传入上面定义的Advice, EnableWebSecurity引入了一个 MethodSecurityMetadataSourceAdvisorRegistrar , 它创建了 MethodSecurityMetadataSourceAdvisor 切面, 并且指定了上面的拦截器名字作为构造参数, 使用 MethodSecurityMetadataSource 的实现实现也有多种通过组合的方式, 确定需要切入的bean后面从方法中提取权限表达式也是交给这个来实现 所以后面的流程就是 当一个请求来到切入的方法就会被拦截器处理, MethodSecurityInterceptor 拦截器 会拿到 AOP里面的 MethodInvocation,然后它会根据方法中的注解, 提取出所需权限, 交给访问决策管理器, 访问决策管理器 再交给 投票器,因此, 上面创建的投票器 又会交给 advice, advice又交给handler处理, 也就是下面定义的这个handler处理,handler再利用el表达式计算, el会需要一个rootObject, 具体方法可以定义在rootObject里面, 只需要返回布尔值即可 package com.zzhua.blog.config.security.auth;import org.aopalliance.intercept.MethodInvocation; import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; import org.springframework.security.access.expression.method.MethodSecurityExpressionOperations; import org.springframework.security.authentication.AuthenticationTrustResolverImpl; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component;/*可参考如何在 Spring Security 中自定义权限表达式-https://juejin.cn/post/7119086250610409508此handler 将会被注入到 GlobalMethodSecurityConfiguration#setMethodSecurityExpressionHandler 作为 handlerGlobalMethodSecurityConfiguration 定义了一个 PreInvocationAuthorizationAdvice 的bean, 获取并设置了上面定义的 handlerGlobalMethodSecurityConfiguration 并且定义了aop中的 methodSecurityInterceptor()拦截器,会去创建访问决策管理器访问决策管理器会去添加投票器当然不止这一种投票器会创建一个 PreInvocationAuthorizationAdviceVoter, 里面会传入上面定义的Advice,EnableWebSecurity引入了一个 MethodSecurityMetadataSourceAdvisorRegistrar ,它创建了 MethodSecurityMetadataSourceAdvisor 切面, 并且指定了上面的拦截器名字作为构造参数,使用 MethodSecurityMetadataSource 的实现实现也有多种通过组合的方式, 确定需要切入的bean后面从方法中提取权限表达式也是交给这个来实现所以后面的流程就是当一个请求来到切入的方法就会被拦截器处理, MethodSecurityInterceptor 拦截器 会拿到 AOP里面的 MethodInvocation,然后它会根据方法中的注解, 提取出所需权限, 交给访问决策管理器, 访问决策管理器 再交给 投票器,因此, 上面创建的投票器 又会交给 advice, advice又交给handler处理, 也就是下面定义的这个handler处理,handler再利用el表达式计算, el会需要一个rootObject, 具体方法可以定义在rootObject里面, 只需要返回布尔值即可 */ Component public class SysMethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler implements MethodSecurityExpressionHandler {Overrideprotected MethodSecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication,MethodInvocation invocation) {// 换成自己的实现其它的都照抄源码里面的下面又多了可以很多自定义的东西了SysMethodSecurityExpressionRoot root new SysMethodSecurityExpressionRoot(authentication);root.setThis(invocation.getThis());root.setPermissionEvaluator(getPermissionEvaluator());root.setTrustResolver(new AuthenticationTrustResolverImpl());root.setRoleHierarchy(getRoleHierarchy());// root.setDefaultRolePrefix(ROLE_);return root;}}SysMethodSecurityExpressionRoot package com.zzhua.blog.config.security.auth;import com.zzhua.blog.config.constant.SysConstants; import com.zzhua.blog.config.security.UserDetailDTO; import com.zzhua.blog.util.SecurityUtil; import org.springframework.security.access.expression.SecurityExpressionRoot; import org.springframework.security.access.expression.method.MethodSecurityExpressionOperations; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority;import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.stream.Collectors;class SysMethodSecurityExpressionRootextends SecurityExpressionRootimplements MethodSecurityExpressionOperations {private Object filterObject;private Object returnObject;private Object target;SysMethodSecurityExpressionRoot(Authentication a) {super(a);}/* 自定义鉴权方法 */public boolean isAuth(String permission) {UserDetailDTO userDetailDTO SecurityUtil.getPrincipal();if (SysConstants.IS_ADMIN.equals(userDetailDTO.getIsAdmin())) {return true;} else {ListString authories getAuthories();for (String authory : authories) {if (Objects.equals(authory, permission)) {return true;}}}return false;}private ListString getAuthories() {Collection? extends GrantedAuthority authorities getAuthentication().getAuthorities();ListString authoritys authorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());return authoritys;}public void setFilterObject(Object filterObject) {this.filterObject filterObject;}public Object getFilterObject() {return filterObject;}public void setReturnObject(Object returnObject) {this.returnObject returnObject;}public Object getReturnObject() {return returnObject;}void setThis(Object target) {this.target target;}public Object getThis() {return target;} }
http://www.dnsts.com.cn/news/233669.html

相关文章:

  • 贵州网站seo欧美免费视频网站模板
  • seo搜索引擎优化工资多少钱站长seo
  • 怎么样自己做网站wordpress博客页面显示文章在哪
  • 网站如何做线下的市场推广莱芜论坛招工
  • 可视化拖拽建站系统衡阳县做淘宝网站建设
  • 如何用网站首页做404php可以做网站吗
  • 贵州城乡建设官方网站建立网站的公司有哪些
  • 网站模块设计软件王烨飞微博
  • 海南建设官方信息网站做网站运营话术
  • 个人做网站怎么备案专业营销网站费用
  • 网站建设教程主页推广app平台有哪些
  • 教育网站改造方案个人网站怎么制作
  • 网站网站开发wordpress htaccess 下载
  • 上海建站系统wordpress主题模板下载
  • 英铭科技做网站和设计制作更专业展馆在线设计平台
  • 聊城市公司网站建站全国中小企业查询
  • 网站如何投放广告都什么企业需要网站吗
  • 所有网上购物的网站上海松江水处理网站建设
  • 大连公司地址seo网络优化推广
  • 网站建设详细讲解 狐灵软件网站开发公司名字
  • 物流运输做网站的素材百度alexa排名
  • 网站推广的优势有哪些python制作的网站
  • 同ip多域名做同行业网站什么是营销型网站?
  • 企业网站源码 多语言网站开发财务
  • 福州市建设局职改办门户网站建一个信息 类网站
  • 广东外贸网站建设动漫短视频怎么制作教程
  • 廊坊网站专业制作网站后台管理怎么做
  • 中山网站建设文化策划《jsp网站开发详解》百度云
  • 开源程序做网站任务做电商运营还是网站运营哪个好
  • 小米网站建设案例商城网站制作网站