首页 > 代码库 > 自定义 Relam
自定义 Relam
package org.zln.hello.realm;import org.apache.shiro.authc.*;import org.apache.shiro.realm.Realm;/** * Created by sherry on 16/9/8. */public class MyRealm01 implements Realm { @Override public String getName() { return "MyRealm01"; } @Override public boolean supports(AuthenticationToken token) { //仅支持UsernamePasswordToken类型的 Token return token instanceof UsernamePasswordToken; } @Override public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String)token.getPrincipal(); //得到用户名 String password = new String((char[])token.getCredentials()); //得到密码 if(!"zhang".equals(username)) { throw new UnknownAccountException(); //如果用户名错误 // } if(!"123".equals(password)) { throw new IncorrectCredentialsException(); //如果密码错误 } //如果身份认证验证成功,返回一个 AuthenticationInfo 实现; return new SimpleAuthenticationInfo(username, password, getName()); }}
#声明一个 realmMyRealm01=org.zln.hello.realm.MyRealm01#指定 securityManager 的 realms 实现securityManager.realms=$MyRealm01
package org.zln.hello;import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.Factory;/** * Created by sherry on 16/9/8. */public class HelloWorld { private static Logger logger = LogManager.getLogger(HelloWorld.class); private static Subject subject; static { //1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager// Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-realm.ini"); //2、得到 SecurityManager 实例 并绑定给 SecurityUtils SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); //3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证) subject = SecurityUtils.getSubject(); } public static boolean login(String username,String password){ UsernamePasswordToken token = new UsernamePasswordToken(username,password); //4、登录,即身份验证 try { subject.login(token); }catch (Exception e){ logger.info("身份验证失败"); logger.error(e.getMessage(),e); return false; } return subject.isAuthenticated();//是否成功登陆 } public static void main(String[] args) { //6、退出 subject.logout(); }}
多 Realm 配置
#声明一个 realm
myRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1
myRealm2=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm2
#指定 securityManager 的 realms 实现
securityManager.realms=$myRealm1,$myRealm2
securityManager 会按照 realms 指定的顺序进行身份认证。此处我们使用显示指定顺序的方 式指定了 Realm 的顺序,如果删除“securityManager.realms=$myRealm1,$myRealm2”,那 么 securityManager 会按照 realm 声明的顺序进行使用(即无需设置 realms 属性,其会自动 发现),当我们显示指定 realm 后,其他没有指定 realm 将被忽略,如 “securityManager.realms=$myRealm1”,那么 myRealm2 不会被自动设置进去。
自定义 Relam
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。