Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
shiro : 认证 授权
步骤:
创建mavan项目
导入shiro依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
导入到项目的pom.xml文件下
在src/mian/resources 建造一个文本
在shiro.ini 里面开始配置用户
#配置用户
[users]
admin=123,father
sa=222,son
[roles]
father=add,update,delete,select
son=add
在shiro-realm.ini 配置
myrealm=com.ch.shiro.MyRealm
securityManager.realm=$myrealm
在src/main/java目录下建一个shiro的类
继承一个类 extends AuthorizingRealm
实现里面的二个方法 一个是认证 一个是授权
public class MyRealm extends AuthorizingRealm{
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//用户名
String username=(String) principals.getPrimaryPrincipal();
System.out.println(username);
//通过用户名查询到该用户对应的角色
List<String> roles=new ArrayList<String>();
roles.add("father");
roles.add("son");
//通过用户名查询角色,通过角色查询权限
List<String> premissions=new ArrayList<String>();
premissions.add("update");
premissions.add("select");
//授权信息
SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
//将角色赋予认证的用户
info.addRoles(roles);
//将权限信息返回
info.addStringPermissions(premissions);
return info;
}
//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken=(UsernamePasswordToken)token;
//获取用户名和密码的方法
String uname=usernamePasswordToken.getUsername();
/*String pwd=new String(usernamePasswordToken.getPassword());
System.out.println(uname+"\t"+pwd);*/
//调用数据库查询的方法(通过用户名查询密码)
String dbpwd="123";
//认证
SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(uname, dbpwd, getName());
return info;
}
}
这个文件里面要和你之前配置的用户名和权限一样
最后开始写测试
在src/test/java 下面建个test测试类 进行测试
public class TestShiro {
public static void main(String[] args) {
//使用shiro完成基础认证
//创建shiro的认证工厂
Factory factory=new IniSecurityManagerFactory(“classpath:shiro-realm.ini”);
//通过工厂得到安全管理者的对象
SecurityManager manager=factory.getInstance();
//将安全管理者添加到当前的安全管理环境中
SecurityUtils.setSecurityManager(manager);
//获取安全管理项目
Subject subject= SecurityUtils.getSubject();
//创建保存用户名和密码的令牌
UsernamePasswordToken token=new UsernamePasswordToken("admin", "123");
//获取认证结果
boolean f=false;
try {
subject.login(token);
f=subject.isAuthenticated();
} catch (Exception e) {
}
System.out.println(f);
//是否具有某个角色
boolean f1=subject.hasRole("father");
System.out.println(f1);
//是否具有某一些权限
/*boolean f2=subject.isPermitted("update");
System.out.println(f2);*/
//是否具有多个权限
boolean f2=subject.isPermittedAll("update","select");
System.out.println(f2);
}