shiro 怎么实现一个接口同时允许 anno 和 authc 访问呢?

2020-07-29 12:52:39 +08:00
 gz911122

如果只是设置成 anno 的话, 我发现不解析用户信息了...

假设有个接口, 未登录用户和已登录用户都可以访问, 但是已登录用户访问的时候记录访问量+1.

那么应该怎么实现

  1. 都可以访问

  2. 可以区分是否是已登录用户呢?

求大佬指点

2149 次点击
所在节点    Java
11 条回复
nakes
2020-07-29 13:26:55 +08:00
接口设置 anon,然后里面
SecurityUtils.getSubject().isAuthenticated(),true 就是登陆了。获取登录用户记录访问量+1 就行。false 就是未登录,走未登录的方法就行了
gz911122
2020-07-29 13:52:43 +08:00
@nakes 谢谢我试试.

这种情况下还能获取到设置的用户信息么?
gz911122
2020-07-29 14:30:22 +08:00
@nakes
我试了下设置成 anon 的话, 请求不会进入到 AuthenticationFilter, 没得判断 isAuthenticated 了...
liuxiaohua
2020-07-29 15:51:42 +08:00
用户信息存在哪里? token ?
gz911122
2020-07-29 16:14:38 +08:00
@liuxiaohua 对的 token , 本来是继承 AuthenticationFilter, 然后解析 token 放到 Subject 里的...
chen006
2020-07-29 16:21:37 +08:00
自定义 filter,把 auth 的判断和你的需求放到里面,插到 filterchain 里面
liuxiaohua
2020-07-29 17:02:14 +08:00
请求接口带 token 了嘛?如果带了直接在接口里面获取一下 token,判断 token 有没有不就行了!!!
gz911122
2020-07-29 17:07:48 +08:00
@liuxiaohua
@chen006

嗯就是跟 shiro 没关系了呗...?
liuxiaohua
2020-07-29 17:10:55 +08:00
是呀,shiro 只是在过滤器里设置了接口为 anon 就行,业务逻辑实现就是我刚刚说的那样!!!
gz911122
2020-07-29 17:12:48 +08:00
@liuxiaohua 是的 这种是可以的. 谢谢

有用 shiro 来解决的办法嘛?
liuxiaohua
2020-07-29 17:19:11 +08:00
没有其他的解决方法吧。这个问题最底层还是要在业务层判断是否登录用户进行记录访问量+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694005

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX