if (username.startsWith("D") && username.length() == 12){ //普通用户 SysUsers currentUser = sysUserService.findSysUserByUsername(username); try { //通过认证后返回 if (currentUser != null && JWTUtil.verify(token)){ return new SimpleAuthenticationInfo(token,token,this.getName()); } } catch (Exception e) { e.printStackTrace(); } }else { SysAdmin currentUser = sysAdminService.findSysAdminByUsername(username); try { //通过认证后返回 if (currentUser != null && JWTUtil.verify(token)){ return new SimpleAuthenticationInfo(token,token,this.getName()); } } catch (Exception e) { e.printStackTrace(); } } return null; }这段代码对应上面的问题,应怎样修改
时间: 2024-02-10 16:27:09 浏览: 114
SQLServer2000附加数据库后的用户User处理.doc
根据你提供的代码片段,可以看出你想基于不同的用户名格式来进行不同类型用户(普通用户和管理员)的认证。
首先,我注意到你有两个不同的实体类(SysUsers和SysAdmin)用于表示不同类型的用户。因此,你需要确保这两个实体类分别对应了正确的表或文档,并且在相应的Service类中实现了相应的查询方法。
根据你的代码逻辑,我可以给出以下修改建议:
```java
if (username.startsWith("D") && username.length() == 12){
// 普通用户
SysUsers currentUser = sysUserService.findSysUserByUsername(username);
try {
// 通过认证后返回
if (currentUser != null && JWTUtil.verify(token)){
return new SimpleAuthenticationInfo(currentUser, token, this.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
// 管理员用户
SysAdmin currentUser = sysAdminService.findSysAdminByUsername(username);
try {
// 通过认证后返回
if (currentUser != null && JWTUtil.verify(token)){
return new SimpleAuthenticationInfo(currentUser, token, this.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
```
上述修改的主要变化是将`SimpleAuthenticationInfo`的第一个参数从token改为对应的用户实体类对象(`currentUser`)。这样,在后续的身份验证过程中,Shiro将使用该用户对象进行权限和角色的验证。
另外,确保你已经正确导入了相关的类,并且在其他地方正确配置了`sysUserService`和`sysAdminService`这两个Service类的实例。
请根据你的实际代码和业务需求进行相应的修改。
阅读全文