java鬼混笔记:shiro 5、shiro授权判断,基本动态获取权限
来源:互联网 发布:淘宝网图书专营店 编辑:程序博客网 时间:2024/05/21 00:47
这次的笔记是记录shiro的授权功能,上一文的权限设置来自于ini配置文件,写死的,这次换成动态的,模拟从数据库里获取操作,上代码。。。
自定义授权还是要基本自定义realm的,所以要配置自定义realm先,和之前的一样。
shiro_role.ini
[main] #自定义的realm,在RoleRealm中模拟获取这个用户的角色和权限信息realm_role=com.ywj.TestShiro.RoleRealm;把自定义的realm 注入到 securityManager $realm_diy 中的realm_diy和上面的一致 securityManager.realms=$realm_role
接下来是自定义realm的内容
RoleRealm.java
package com.ywj.TestShiro;import java.util.ArrayList;import java.util.List;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;public class RoleRealm extends AuthorizingRealm {@Overridepublic void setName(String name) {super.setName("RoleRealm");// 自定义一个名字}// 授权处理@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 获取账号String account = (String) principals.getPrimaryPrincipal();// 下面假设通过account找到相关的角色功权限// 加载角色(假设是从数据库里获取的)List<String> roles = new ArrayList<String>();roles.add("role1");roles.add("role2");// 加载权限(假设是从数据库里获取的)List<String> permissions = new ArrayList<String>();permissions.add("user:add");permissions.add("user:update");permissions.add("card:add");permissions.add("card:update222");// 放进去SimpleAuthorizationInfo sa = new SimpleAuthorizationInfo();sa.addRoles(roles);sa.addStringPermissions(permissions);return sa;}// 之前的认证功能@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 获取token里的账号String username = String.valueOf(token.getPrincipal());String password = "123";// 返回认证信息return new SimpleAuthenticationInfo(username, password, this.getName());}}
ok ,可以直接测试了,和之前的一样
Test.java
package com.ywj.TestShiro;import java.util.Arrays;import java.util.List;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.IncorrectCredentialsException;import org.apache.shiro.authc.UnknownAccountException;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;public class Test {public static void main(String[] args) {// 和原来的一样,不做注释Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:config/shiro_role.ini");SecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("ywj", "123");try {subject.login(usernamePasswordToken);} catch (UnknownAccountException e) {System.out.println("用户不存在");} catch (IncorrectCredentialsException e) {System.out.println("密码不正确");} catch (Exception e) {e.printStackTrace();}boolean flag = subject.isAuthenticated();System.out.println("已登录:" + flag);// 和基本ini配置的授权一样System.out.println(subject.hasRole("role3"));// falseSystem.out.println(subject.isPermitted("card:update222"));// turesubject.logout();flag = subject.isAuthenticated();System.out.println("已登录:" + flag);}}
阅读全文
0 0
- java鬼混笔记:shiro 5、shiro授权判断,基本动态获取权限
- java鬼混笔记:shiro 4、shiro授权判断,基本ini配置
- java鬼混笔记:shiro 8、连接数据库授权,注解设置权限
- java鬼混笔记:shiro 7、shiro验证码功能
- java鬼混笔记:shiro 9、缓存授权,免重新登录更新用户权限
- java鬼混笔记:shiro 1、基本ini配置文件的登录认证
- java鬼混笔记:shiro 2、自定义realm进行认证
- shiro动态授权
- java鬼混笔记:shiro 3、shiro下的散列操作(MD5,SHA-1)
- java鬼混笔记:shiro 6、shiro和spring整合、数据库方式认证登录
- shiro权限框架详解05-shiro授权
- 【Shiro权限管理】14.Shiro授权
- shiro学习--从数据库获取动态权限
- spring+shiro权限判断
- Apache Shiro 基于权限授权
- Shiro动态修改权限
- 【shiro】shiro 学习笔记4-初识shiro授权
- Shiro笔记(五)----授权(Authorization)
- GAN简介
- spring mvc 一次请求过程跟踪(一)
- Java反射机制之获得其他类中的所有属性
- STM32F103之硬件设计
- 丑数求解以及丑数的优化
- java鬼混笔记:shiro 5、shiro授权判断,基本动态获取权限
- Hive源码编译常见问题
- 喷头装置(一)
- Ctrl+Z 的反快捷键是Ctrl+Y
- zepto的$.inArray用法
- angularjs中作用域事件的路由与广播
- 堆排序
- tomcat换端口命令
- 自动化脚本腾讯云配置集群(四)自动化安装从节点的JDK+Hadoop