From 46e7cd9daeb5072eb562317520307a1d60b1446e Mon Sep 17 00:00:00 2001 From: huanghongfa <18228131219@163.com> Date: 星期四, 25 二月 2021 13:15:47 +0800 Subject: [PATCH] all --- springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 96 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java index 531b179..16d2388 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java +++ b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java @@ -1,3 +1,4 @@ +<<<<<<< HEAD package com.panzhihua.zuul.filters; import com.alibaba.fastjson.JSONArray; @@ -91,3 +92,98 @@ return false; } } +======= +package com.panzhihua.zuul.filters; + +import com.alibaba.fastjson.JSONArray; +import com.panzhihua.common.constants.SecurityConstants; +import com.panzhihua.common.constants.UserConstants; +import com.panzhihua.common.model.vos.MenuVO; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.common.service.user.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.access.SecurityConfig; +import org.springframework.security.web.FilterInvocation; +import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @program: springcloud_k8s_panzhihuazhihuishequ + * @description: 权限 + * @author: huang.hongfa weixin hhf9596 qq 959656820 + * @create: 2020-11-25 15:08 + **/ +@Slf4j +@Component +public class SercuritFilter implements FilterInvocationSecurityMetadataSource { + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource + private UserService userService; + + /** + * 获取当前url对应的角色 + * @param o 请求url + * @return 权限列表 + * @throws IllegalArgumentException 异常 + */ + @Override + public Collection<ConfigAttribute> getAttributes(Object o) throws IllegalArgumentException { + List<ConfigAttribute> configAttributes=new ArrayList<>(); + String requestUrl = ((FilterInvocation) o).getRequestUrl(); + log.info("接口请求地址【{}】",requestUrl); + Boolean aBoolean = stringRedisTemplate.hasKey(SecurityConstants.ROLE_ALL); + ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue(); + List<MenuVO> menuVOS=new ArrayList<>(); + if (aBoolean) { + String roleAll = valueOperations.get(SecurityConstants.ROLE_ALL); + menuVOS= JSONArray.parseArray(roleAll,MenuVO.class); + }else{ + R<List<MenuVO>> r = userService.getAllMenu(); + List<MenuVO> data = (List<MenuVO>)r.getData(); + if (!ObjectUtils.isEmpty(data)) { + menuVOS=data; + valueOperations.set(SecurityConstants.ROLE_ALL,JSONArray.toJSONString(data),24, TimeUnit.HOURS); + } + } + if (!ObjectUtils.isEmpty(menuVOS)) { + List<MenuVO> collect = menuVOS.stream().filter(menuVO -> menuVO.getUrl().equals(requestUrl)).collect(Collectors.toList()); + if (!ObjectUtils.isEmpty(collect)) { + collect.forEach(menuVO -> { + configAttributes.add(new SecurityConfig(menuVO.getRole())); + }); + } + } + boolean contains = requestUrl.contains("/api/applets/"); + boolean docs = !requestUrl.contains("docs"); + boolean login = !requestUrl.contains("login"); + boolean refreshToken = !requestUrl.contains("refreshToken"); + boolean useragreement = !requestUrl.contains("useragreement"); + if (contains&&docs&&login&&refreshToken&&useragreement) { + configAttributes.add(new SecurityConfig(SecurityConstants.ROLE_APPLETS)); + } + return configAttributes; + } + + @Override + public Collection<ConfigAttribute> getAllConfigAttributes() { + return null; + } + + @Override + public boolean supports(Class<?> aClass) { + return false; + } +} +>>>>>>> afeb571ca27a185766615c2b68fcfa5b13a56dab -- Gitblit v1.7.1