最近在写一个微信小程序小项目,安全框架采用了 security,但系统需要区分前台用户和后台用户
起初我的想法是写两个 provider,两个 userDetailsService 分别处理前台用户和后台用户 并采用 jwt 方式校验
实现的基本的登录流程后,我发现后面越来越难写下去,因为后台用户和前台用户是两个表的,权限也完全不同,很难融合到一起 有没有大牛好点的解决方案,或者拆开成两个项目?
1
echo1937 2021-01-23 19:55:10 +08:00
啥叫做区分前台和后台用户?
|
3
soulzz 2021-01-23 19:58:30 +08:00
那就再建一张表,标记用户是前台还是后台后户
|
4
notejava 2021-01-23 20:18:14 +08:00
这里应该是两个项目,两套权限管理。
|
5
echo1937 2021-01-23 20:25:52 +08:00 1
|
6
ourslay 2021-01-23 20:42:29 +08:00 via iPhone
贴下之前回复的。
自定义 Filter 继承 UsernamePasswordAuthenticationFilter,分别实现对 user/admin 的 AuthenticationManager configure 配置 ``` .addFilter(new MultipleAuthenticationFilter(adminAuthenticationManager(), "/admin/login")) .addFilter(new MultipleAuthenticationFilter(userAuthenticationManager(), "/user/login")); ``` AuthenticationManager 配置 ``` List<AuthenticationProvider> providers = new ArrayList<>(); DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); daoAuthenticationProvider.setUserDetailsService(adminDetailsService()); // or userDetailsService providers.add(daoAuthenticationProvider); return new ProviderManager(providers); ``` |
7
coder1v5 2021-01-23 21:28:45 +08:00
jwt 中将用户关键信息 userid, userType 加入进去,写一个 jwtProvider,在 jwtProvider 中解析出来 token,token 本身抽象出来也是认证信息(用户名和密码),这个 Provider 当做登录认证 Provider 去写。Filter 做配置转发给 Provider 。然后根据 token 中解析出来的 userId,userType, 调用不同的 service 去获取对应的权限.然后放入 SecurityContext 中就可以了
if(Strings.equals(userType,后台用户){ //调用后台用户的服务类,添加用户信息,权限信息,放入 security 上下文中 SecurityContextHolder.getContext().setAuthentication(authToken); }else{ //调用前台用户的服务类,添加用户信息,权限信息,放入 security 上下文中 SecurityContextHolder.getContext().setAuthentication(authToken); } spring security 对于这种场景提供了足够的支持,别说两种用户类型了,多少种登录用户,及多种认证方式都可以轻松扩展。 |
8
vjnjc 2021-01-24 01:08:01 +08:00
估计是管理后台用户和软件最终用户两套吧
其实 security 授权认证可以用 jwt token 解析出来 uid+userType,认证完了以后扔一个用户 object 在 context 里面,没有限定一定要同一个用户类型 |
9
nvkou 2021-01-24 01:13:43 +08:00 via Android
不应该理解为不同权限吗?分表有什么意义?
后台入口不鉴权的吗 |
10
qinxi 2021-01-24 11:09:56 +08:00
系统分离就完了...各是各的用户系统. 更新功能互不影响
|