芋道源码yudao-cloud 二开日记(添加接口权限和页面固定路由) ...

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

今天的需求是单独开放两个接口,不用登录也能访问,于是看了下文档有几种方式,最快捷最方便的方式就是在方法上加注解@PermitAll,例如下面这样:

  1. @GetMapping("/get/{configId}")
  2. @PermitAll
  3. public void getConfig(@PathVariable("configId") Long configId) throws Exception {
  4.     // ...
  5. }
复制代码
但假如是多个方法都需要放开,那建议还是用下面这种设置,找到对应服务下的SecurityConfiguration.java文件,比如我要放开yudao-module-system模块下/system/mall/下面的所有接口,那么文件目次是:
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java
  1. /**
  2. * System 模块的 Security 配置
  3. */
  4. @Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration")
  5. public class SecurityConfiguration {
  6.     @Bean("systemAuthorizeRequestsCustomizer")
  7.     public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() {
  8.         return new AuthorizeRequestsCustomizer() {
  9.             @Override
  10.             public void customize(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry) {
  11.                 // Swagger 接口文档
  12.                 registry.antMatchers("/v3/api-docs/**").permitAll()
  13.                         .antMatchers("/webjars/**").permitAll()
  14.                         .antMatchers("/swagger-ui").permitAll()
  15.                         .antMatchers("/swagger-ui/**").permitAll();
  16.                 // Druid 监控
  17.                 registry.antMatchers("/druid/**").anonymous();
  18.                 // Spring Boot Actuator 的安全配置
  19.                 registry.antMatchers("/actuator").anonymous()
  20.                         .antMatchers("/actuator/**").anonymous();
  21.                 // RPC 服务的安全配置
  22.                 registry.antMatchers(ApiConstants.PREFIX + "/**").permitAll();
  23.                 // 添加如下
  24.                 registry.antMatchers("/system/mall/**").permitAll();
  25.             }
  26.         };
  27.     }
  28. }
复制代码
放开是没问题了,可一经测试,访问接口会出现租户标识未通报的异常,如下:

因为我们这是个多租户的框架,默认每一次请求都会带上租户id去查询。只要在headers添加tenant-id:租户id就可以,如下:

好了,接口是完成了,那么看看前端页面的设置。

我的需求是页面不用登陆也能访问页面,并且不需要管理的菜单栏,如下图:


1.找到路由文件添加固定路由,如下图:

2.并且添加不重定向的路由,如下图:

3.ok,试着访问一下,页面是打开了,但是接口报错,如下图:

还是我们刚刚上面测接口的问题,没有传租户id,那我们加上就是了,先看看请求拦截器怎么设置租户id,如下图:

4.既然知道了是从localStorege获取的,那我们在请求接口之前存上是不是就OK,嘿嘿。。先看看在登录的情况下是怎么存储的

5.知道了上面的存储结构,简朴粗暴上代码。
  1. onMounted(()=>{
  2.   // 该页面设置固定租户id,否则请求会出现未传递租户id的异常
  3.   const tenantCache = {
  4.     "c":new Date().getTime(), // 当前时间戳
  5.     "e":253402300799000, // 过期时间戳
  6.     "v":"1" // 租户id
  7.   }
  8.   localStorage.setItem("tenantId",JSON.stringify(tenantCache));
  9.   // 初始化接口
  10.   init();
  11. })
复制代码
测试访问乐成。。。完成


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表