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

做导师一般去什么网站找素材搜索引擎优化与推广的产生及发展

做导师一般去什么网站找素材,搜索引擎优化与推广的产生及发展,电话销售如何快速吸引客户,注册个体户1.单独在要调用服务的controller写上相关方法#xff08;Inner(value true)要走aop#xff0c;会检测是否有内部调用标识#xff09;具体见下述 2. 编写Feign远程调用的接口#xff0c;注意加上RequestHeader(SecurityConstants.FROM) String from。因为inner(value true…1.单独在要调用服务的controller写上相关方法Inner(value true)要走aop会检测是否有内部调用标识具体见下述 2. 编写Feign远程调用的接口注意加上RequestHeader(SecurityConstants.FROM) String from。因为inner(value true)会走aop调用时会检测是否带有SecurityConstants.FROM_IN内部调用标识 3.用Quartz定时任务远程调用接口带上SecurityConstants.FROM_IN参数为内部识别 因为注解inner(value true)中的valuetrue回走aop检测是否带有内部标识如果没有则验证不通过。也可以让valuefalse这样不走aop了那么就可以不用在Feign远程调用的接口方法中加上注解RequestHeader(SecurityConstants.FROM) String from。 总而言之inner(value true)valuetrue且要加RequestHeader(SecurityConstants.FROM) String from 。可以理解为仅在Feign远程调用内部时有权访问方法外面经过网关的都不可以调用无权访问方法。相反valuefalse所有地方均可不鉴权使用方法 外部从Gateway访问需要鉴权eg.CURD操作。这种是最常使用的用户登录后正常访问接口不需要我们做什么处理可能有的接口需要加权限字段。 外部从Gateway访问不需要鉴权eg.短信验证码。需要我们将uri加入到security.oauth2.client.ignore-urls配置中可以不需要鉴权访问 内部服务间用Feign访问不需要鉴权eg.Auth查询用户信息。也是需要我们将uri加入到security.oauth2.client.ignore-urls配置中那与第二种的区别就是这种情况下大多数都是服务可以请求另一个服务的所有数据不受约束那我们如果仅仅只配置ignore-url的话外部所有人都可以通过url请求到我们内部的链接安全达不到保障。 鉴于上述第三种情况配置了ignore-url和Feign此时该接口不需要鉴权服务内部通过Feign访问服务外部通过url也可以访问所以Pigx中加入了一种RequestHeader(SecurityConstants.FROM)的处理方式。即在接口方法中对头部进行判断只有请求带上相应的Header参数时才允许通过访问否则抛出异常。那这时候其实我们在外网通过Gateway访问的时候也可以手动带上这个Header参数来达到这个目的。所以我们便在Gateway中设置了一个GlobalFilter过滤器 /*** author * date 2018/10/8* p* 全局拦截器作用所有的微服务* p* 1. 对请求头中参数进行处理 from 参数进行清洗 2. 重写StripPrefix 1,支持全局* p* 支持swagger添加X-Forwarded-Prefix header F SR2 已经支持不需要自己维护*/ Component public class ParkRequestGlobalFilter implements GlobalFilter, Ordered {/*** Process the Web request and (optionally) delegate to the next {code WebFilter}* through the given {link GatewayFilterChain}.* param exchange the current server exchange* param chain provides a way to delegate to the next filter* return {code MonoVoid} to indicate when request processing is complete*/Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1. 清洗请求头中from 参数ServerHttpRequest request exchange.getRequest().mutate().headers(httpHeaders - {httpHeaders.remove(SecurityConstants.FROM);// 设置请求时间httpHeaders.put(CommonConstants.REQUEST_START_TIME,Collections.singletonList(String.valueOf(System.currentTimeMillis())));}).build();// 2. 重写StripPrefixaddOriginalRequestUrl(exchange, request.getURI());String rawPath request.getURI().getRawPath();String newPath / Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, /)).skip(1L).collect(Collectors.joining(/));ServerHttpRequest newRequest request.mutate().path(newPath).build();exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());return chain.filter(exchange.mutate().request(newRequest.mutate().build()).build());} 这个过滤器在处理HttpRequest的时候会删除从外部请求头里的SecurityConstants.FROM这个参数。此时的效果就是这个URL从外部访问不需要鉴权但由于Gateway的过滤最终到达我们接口方法时由于缺少头部信息被拒绝访问而服务间通过Feign访问不经过Gateway则可以正常访问。 那原始的处理方法和处理逻辑就是这样首先将uri加入ingore-url然后在接口的方法和Feign的接口参数中写上RequestHeader参数最后在Feign-Client中带上这个SecurityConstants.FROM参数。既然这种逻辑都是相同的那后面的pigx版本发行后就使用AOP将此步骤抽离出来成为了Inner。   # Inner的处理流程 # 统一的ignore-url处理#统一的URL处理 首先我们来看看这个注解的代码 package com.hongtu.park.common.security.annotation;import java.lang.annotation.*;/*** 服务调用不鉴权注解** author * date 2020-06-14*/ Target({ ElementType.METHOD, ElementType.TYPE }) Retention(RetentionPolicy.RUNTIME) Documented public interface Inner {/*** 是否AOP统一处理(可以理解为是否仅允许Feign之间调用)* return false, true*/boolean value() default true;/*** 需要特殊判空的字段(预留)* return {}*/String[] field() default {};}首先在我们项目加载阶段我们获取有Inner注解的类和方法然后获取我们配置的uri经过正则替换后面的可变参数为*然后将此uri加入到ignore-url中。此时我们就能达到所有Inner配置的方法/类上的接口地址都统一在项目加载阶段自动帮我们加到ignore-url中不需要我们手动配置免去了很多开发工作同时也能避免我们忘记配置而浪费开发时间。核心代码如下   /*** author * date 2020-03-11* p* 资源服务器对外直接暴露URL,如果设置contex-path 要特殊处理*/ Slf4j ConfigurationProperties(prefix security.oauth2.client) public class PermitAllUrlProperties implements InitializingBean {private static final Pattern PATTERN Pattern.compile(\\{(.*?)\\});private static final String[] DEFAULT_IGNORE_URLS new String[] { /actuator/**, /error, /v3/api-docs };GetterSetterprivate ListString ignoreUrls new ArrayList();Overridepublic void afterPropertiesSet() {ignoreUrls.addAll(Arrays.asList(DEFAULT_IGNORE_URLS));RequestMappingHandlerMapping mapping SpringContextHolder.getBean(requestMappingHandlerMapping);MapRequestMappingInfo, HandlerMethod map mapping.getHandlerMethods();map.keySet().forEach(info - {HandlerMethod handlerMethod map.get(info);// 获取方法上边的注解 替代path variable 为 *Inner method AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class);Optional.ofNullable(method).ifPresent(inner - Objects.requireNonNull(info.getPathPatternsCondition()).getPatternValues().forEach(url - ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, *))));// 获取类上边的注解, 替代path variable 为 *Inner controller AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Inner.class);Optional.ofNullable(controller).ifPresent(inner - Objects.requireNonNull(info.getPathPatternsCondition()).getPatternValues().forEach(url - ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, *))));});}}# 统一的安全性处理 那上面讲到的如果我们不希望这个url可以直接被外网调用仅能在Feign服务中调用改如何统一处理呢  我们使用一个Spring-AOP在对所有Inner注解的方法做一个环绕增强的切点进行统一的处理。在上面我们提到的Inner的value参数当该参数为true时我们对方法的入参进行判断仅当符合我们定制的入参规则时Pigx这里是用的RequestHeader(SecurityConstants.FROM) 与SecurityConstants.FROM_IN做比较,我们对它进行放行不符合时抛出异常当value为false时咱不做任何处理此时Inner仅起到了一个ignore-url的作用。 /*** author * date 2022-06-04** 服务间接口不鉴权处理逻辑*/ Slf4j Aspect RequiredArgsConstructor public class ParkSecurityInnerAspect implements Ordered {private final HttpServletRequest request;SneakyThrowsAround(within(inner) || annotation(inner))public Object around(ProceedingJoinPoint point, Inner inner) {// 实际注入的inner实体由表达式后一个注解决定即是方法上的Inner注解实体若方法上无Inner注解则获取类上的if (inner null) {Class? clazz point.getTarget().getClass();inner AnnotationUtils.findAnnotation(clazz, Inner.class);}String header request.getHeader(SecurityConstants.FROM);if (inner.value() !StrUtil.equals(SecurityConstants.FROM_IN, header)) {log.warn(访问接口 {} 没有权限, point.getSignature().getName());throw new AccessDeniedException(Access is denied);}return point.proceed();}Overridepublic int getOrder() {return Ordered.HIGHEST_PRECEDENCE 1;}} 通过这两步呢我们首先是在加载时通过找到Inner注解将相应的uri加入到ignore-url中达到自动化配置的目的之后我们又使用切面对Inner的方法进行环绕处理达到安全控制。对比之前的处理方式现在我们使用一个Inner注解就能很快的满足上面说的两种场景大大节省了我们的开发时间。 # 合理的使用Inner注解 上面提到的两种应用场景在我们的代码中其实都是可以使用Inner注解的下面结合Feign做一个简单的示例示例场景就是我们的用户密码登录中的一环 1. 在接口上使用Inner注解使得url无需鉴权 /*** 获取指定用户全部信息** return 用户信息*/InnerGetMapping(/info/{username})public R info(PathVariable String username) {SysUser user userService.getOne(Wrappers.SysUserquery().lambda().eq(SysUser::getUsername, username));if (user null) {return R.failed(null, String.format(用户信息为空 %s, username));}return R.ok(userService.findUserInfo(user));} 2. 编写Feign接口 FeignClient(contextId remoteUserService, value ServiceNameConstants.UMPS_SERVICE) public interface RemoteUserService {/*** 通过用户名查询用户、角色信息** param username 用户名* param from     调用标志* return R*/GetMapping(/user/info/{username})RUserInfo info(PathVariable(username) String username, RequestHeader(SecurityConstants.FROM) String from); }  3. Feign-Client中调用接口带上SecurityConstants.FROM_IN参数为内部识别  /*** 用户密码登录** param username 用户名* return* throws UsernameNotFoundException*/OverrideSneakyThrowspublic UserDetails loadUserByUsername(String username) {Cache cache cacheManager.getCache(CacheConstants.USER_DETAILS);if (cache ! null cache.get(username) ! null) {return (PigxUser) cache.get(username).get();}RUserInfo result remoteUserService.info(username, SecurityConstants.FROM_IN);UserDetails userDetails getUserDetails(result);cache.put(username, userDetails);return userDetails;}
http://www.pierceye.com/news/21787/

相关文章:

  • 河北省和城乡建设厅网站首页网站建设相关网站
  • 庆元建设局网站360建设网站免费
  • 哈尔滨百度优化国外企业网络会议的组织与优化
  • wordpress订单管理插件外贸seo是什么意思啊
  • 如何建设好英文网站2023国际新闻热点事件
  • 无锡做网站优化哪家好个人怎么注册公司都需要什么手续
  • 东莞城乡住房建设厅网站烟台网站建设公司报价
  • 网站制作需要学多久百度快照收录入口
  • 苏州企业网站开发凡客的意思
  • 沈阳求做商城 网站天津品牌网站建设公司排名
  • 微企点做的网站怎么去底下的wordpress重置密码
  • 心理服务网站建设内容wordpress网站重定向循环
  • 网站建设石家庄哪些网站做机票酒店有优势
  • 阜宁县建设局网站wordpress密码hello
  • 模仿网站侵权吗软件app制作
  • 张家港网站推广优化平台网站做等级保护测评
  • 新wordpress仿站许昌建设网站哪家好
  • c 手机网模板网站设计师网站官网
  • 创建免费网站需要的工具深圳做网站公司那家比较好
  • 国外域名购买网站大数据查询个人信息
  • 龙岩做网站开发大概价格甘肃兰州市
  • 内网怎么做网站做读书网站的前景
  • 案例学习网站建设方案摸摸学校天水 网站建设招聘
  • 如何做网站主题长沙医疗网站建设
  • 南京做网站的网络公司江苏智能网站建设流程
  • 东莞市南城装饰工程东莞网站建设活动策划方案书模板
  • 湘潭网站建设湘潭振企专业北京网站制作方案公司
  • 湖南省建设工程网站帝国cms做笑话网站
  • 膜结构行业做网站网页制作工具是
  • 找个免费网站这么难吗wordpress4.6 中文