public class ShiroIniTest {
public static void main(String[] args) {
//创建默认的SecurityManager
DefaultSecurityManager securityManager=new DefaultSecurityManager();
//设置身份验证的策略
ModularRealmAuthenticator authenticator=new ModularRealmAuthenticator();
//指定身份验证的策略是最少有一个
authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
//然后把策略指定给SecurityManager
securityManager.setAuthenticator(authenticator);
//设置授权
ModularRealmAuthorizer authorizer=new ModularRealmAuthorizer();
//authorizer是用于进行授权
authorizer.setPermissionResolver(new WildcardPermissionResolver()); //new WildcardPermissionResolver()用于解析字符串到Permission实例的
securityManager.setAuthorizer(authorizer); //把授权给设置到SecurityManager
//设置数据源 需要自定义realm,要实现Realm接口
securityManager.setRealm(new MyRealm());
//然后把SecurityManager绑定到上下文中
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("admin@shiro.com", "admin");
try {
subject.login(token);
System.out.println(subject.hasRole("test"));
System.out.println("登录成功");
} catch (AuthenticationException e) {
//e.printStackTrace();
System.out.println("用户名或密码错误,登录失败");
}
}
}
自定义的Realm
public class MyRealm1 implements Realm {
@Override
public String getName() {
return "myrealm1";
}
@Override
public boolean supports(AuthenticationToken authenticationToken) {
//限制数据源只支持UsernamePasswordToken
return authenticationToken instanceof UsernamePasswordToken;
}
@Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
String username = (String) authenticationToken.getPrincipal();
String password = new String((char[]) authenticationToken.getCredentials());
if (!"test".equals(username)) {
throw new UnknownAccountException();
}
if (!"123456".equals(password)) {
throw new IncorrectCredentialsException();
}
return new SimpleAuthenticationInfo(username,password, getName());
}
}
自定义realm,需要去实现Realm接口,接口里很多的方法,getName方法,返回数据源的名字,
public boolean supports(AuthenticationToken authenticationToken)
public AuthenticationInfo
getAuthenticationInfo(AuthenticationToken authenticationToken)