博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
智销功能_Shiro权限框架
阅读量:6503 次
发布时间:2019-06-24

本文共 3671 字,大约阅读时间需要 12 分钟。

Shiro是什么?

Spring security 重量级安全框架

Apache shiro 轻量级安全框架

 

Shiro是一个强大且易用的Java权限框架

四大基石

身份验证,授权,密码学,会话管理

 

 

 

/** * String algorithmName, Object source, Object salt, int hashIterations) * 第一个参数algorithmName:加密算法名称 * 第二个参数source:加密原密码 * 第三个参数salt:盐值 * 第四个参数hashIterations:加密次数 */ SimpleHash hash = new SimpleHash("MD5","123456","itsource",10); System.out.println(hash.toHex());

4.自定义Realm

继承AuthorizingRealm

实现两个方法:doGetAuthorizationInfo(授权) /doGetAuthenticationInfo(登录认证)

//身份认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { //1.拿用户名与密码 UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken; String username = token.getUsername(); //2.根据用户名拿对应的密码 String password = getByName(username); if(password==null){ return null; //返回空代表用户名有问题 } //返回认证信息 //准备盐值 ByteSource salt = ByteSource.Util.bytes("itsource"); //密码是shiro自己进行判断 SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username,password,salt,getName()); return authenticationInfo; }
//授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { //拿到用户名 Principal:主体(用户对象/用户名) String username = (String)principalCollection.getPrimaryPrincipal(); //拿到角色 Set
roles = findRolesBy(username); //拿到权限 Set
permis = findPermsBy(username); //把角色权限交给用户 SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(roles); authorizationInfo.setStringPermissions(permis); return authorizationInfo; }

注意:如果我们的密码加密,应该怎么判断(匹配器)

//一.创建我们自己的RealmMyRealm myRealm = new MyRealm(); //创建一个凭证匹配器(无法设置盐值) HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); // 使用MD5的方式比较密码 matcher.setHashAlgorithmName("md5"); // 设置编码的迭代次数 matcher.setHashIterations(10); //设置凭证匹配器(加密方式匹配) myRealm.setCredentialsMatcher(matcher);

5.集成Spring

去找:shiro-root-1.4.0-RC2\samples\spring

5.1 导包

org.apache.shiro
shiro-all
1.4.0
pom
org.apache.shiro
shiro-spring
1.4.0

5.2 web.xml

这个过滤器是一个代码(只关注它的名称)

shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
targetFilterLifecycle
true
shiroFilter
/*

5.3 application-shiro.xml

在咱们的application引入

<import resource="classpath:applicationContext-shiro.xml" />

是从案例中拷备过来,进行了相应的修改

5.4 获取Map过滤

注意,返回的Map必需是有序的(LinkedHashMap)

public class FilterChainDefinitionMapFactory {    /**     * 后面这个值会从数据库中来拿     * /s/login.jsp = anon     * /login = anon     * /s/permission.jsp = perms[user:index]     * /depts/index = perms[depts:index]     * /** = authc     */    public Map
createFilterChainDefinitionMap(){ //注:LinkedHashMap是有序的 Map
filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/s/login.jsp", "anon"); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/s/permission.jsp", "perms[user:index]"); filterChainDefinitionMap.put("/depts/index", "perms[depts:index]"); filterChainDefinitionMap.put("/**", "authc"); return filterChainDefinitionMap; } }

 

转载于:https://www.cnblogs.com/yh9264426/p/10623005.html

你可能感兴趣的文章
软件功能描述
查看>>
ES6转换为ES5
查看>>
京东校招java笔试题_试卷: 京东2019校招笔试Java开发工程师笔试题(1-)
查看>>
java怎么删除创建的类_一个java创建,删除,构建Jenkins等功能的JenkinsUtil工具类...
查看>>
编程java梦想数_JAVA基础总结
查看>>
java初始化重排_JAVA并发环境下指令重排带来的问题
查看>>
java connection 共享_【java項目實戰】ThreadLocal封裝Connection,實現同一線程共享資源...
查看>>
java中锁的等级_深入浅出!对象级别锁 vs 类级别锁 – Java
查看>>
php 5.4 memcache,linux下php5.4添加memcache扩展
查看>>
php session作用,session的作用是什么
查看>>
php 两行数据合并,PHP如何实现统计数据合并
查看>>
java国外研究综述,国内外研究现状_毕业论文
查看>>
php执行事务,thinkPHP框架中执行事务的方法示例
查看>>
php 两个值比较大小写,php比较两个字符串(大小写敏感)的函数strcmp()
查看>>
java3d获取模型在xoy平面的投影,将3D世界点投影到新视图图像平面
查看>>
php 修改图片src,jq修改src图片地址 .attr is not a function
查看>>
sudo php 无法打开,从PHP / Apache,exec()或system()程序作为root用户:“ sudo:无法打开审核系统:权限被拒绝”...
查看>>
Microsoft dotnetConf 2015 一些整理
查看>>
在Android Studio中使用shareSDK进行社会化分享(图文教程)
查看>>
转载:APP的上线和推广——线上推广渠道
查看>>