自定义Realm
上边的程序中使用的是Shiro自带的iniRealm。iniRealm从配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义Realm。
实现自定义Realm
[java] view plain copy print? - public class CustomRealm extends AuthorizingRealm {
- // 设置Realm的名称
- @Override
- public String getName() {
- return super.getName();
- }
- // 支持UsernamePasswordToken
- @Override
- public boolean supports(AuthenticationToken token) {
- return token instanceof UsernamePasswordToken;
- }
- // 用于认证
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
- // token是用户输入的
- // 第一步从token中取出身份信息
- String usercode = (String) token.getPrincipal();
- // 第二步:根据用户输入的usercode从数据库查询
- // ......
- // 如果查询不到返回null
- // 数据库中用户账号是zhangsan
- if (!usercode.equals("zhangsan")) {
- return null;
- }
- // 模拟从数据库中查询到密码
- String password = "123456";
- // 如果查询到返回认证信息AuthenticationInfo
- SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(usercode, password,
- this.getName());
- return simpleAuthenticationInfo;
- }
- // 用于授权
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- return null;
- }
- }
[java] view plain copy print? - public class CustomRealm extends AuthorizingRealm {
- // 设置Realm的名称
- @Override
- public String getName() {
- return super.getName();
- }
- // 支持UsernamePasswordToken
- @Override
- public boolean supports(AuthenticationToken token) {
- return token instanceof UsernamePasswordToken;
- }
- // 用于认证
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
- // token是用户输入的
- // 第一步从token中取出身份信息
- String usercode = (String) token.getPrincipal();
- // 第二步:根据用户输入的usercode从数据库查询
- // ......
- // 如果查询不到返回null
- // 数据库中用户账号是zhangsan
- if (!usercode.equals("zhangsan")) {
- return null;
- }
- // 模拟从数据库中查询到密码
- String password = "123456";
- // 如果查询到返回认证信息AuthenticationInfo
- SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(usercode, password,
- this.getName());
- return simpleAuthenticationInfo;
- }
- // 用于授权
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- return null;
- }
- }
点击下方标题查看相关学习资料
|