JAVA全系列 教程
3762个小节阅读:7088.4k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
编写自定义Realm类
xxxxxxxxxx
public class MyRealm extends AuthorizingRealm {
@Autowired
private UserInfoMapper userInfoMapper;
// 自定义认证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
// 1.获取用户输入的用户名
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
String username = token.getUsername();
// 2.根据用户名查询用户
QueryWrapper<Users> wrapper = new QueryWrapper<Users>().eq("username", username);
Users users = usersMapper.selectOne(wrapper);
// 3.将查询到的用户封装为认证信息
if (users == null) {
throw new UnknownAccountException("账户不存在");
}
/**
* 参数1:用户
* 参数2:密码
* 参数3:Realm名
*/
return new SimpleAuthenticationInfo(users,
users.getPassword(),
"myRealm");
}
// 自定义授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
}
将自定义Realm放入SecurityManager对象中
xxxxxxxxxx
@Configuration
public class ShiroConfig {
// 自定义Realm
@Bean
public MyRealm myRealm(){
return new MyRealm();
}
// SecurityManager对象
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(MyRealm myRealm){
DefaultWebSecurityManager defaultSecurityManager=new DefaultWebSecurityManager();
// 自定义Realm放入SecurityManager中
defaultSecurityManager.setRealm(myRealm);
return defaultSecurityManager;
}
}
无需修改Service和Controller
启动项目,访问登录页http://localhost/login,测试登录功能。
实时效果反馈
1. 在Shiro中,自定义Realm需要继承
A Realm
B AuthorizingRealm
C ShrioRealm
D BaseRealm
2. 在Shiro中,继承AuthorizingRealm需要重写方法
A 自定义认证
B 自定义授权
C 自定义认证和自定义授权
D 以上说法都不对
答案
1=>B 2=>C