设为首页 收藏本站
查看: 930|回复: 0

[经验分享] Apache Shiro 认证、授权、加密和会话管理

[复制链接]

尚未签到

发表于 2018-11-19 13:46:46 | 显示全部楼层 |阅读模式
  官方解释 :  
          Apache Shiro(日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。
Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:
认证 - 用户身份识别,常被称为用户“登录”;
授权 - 访问控制;
密码加密 - 保护或隐藏数据防止被偷窥;
会话管理 - 每用户相关的时间敏感的状态。
Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。
  第一步:配置web.xml
        
  
    shiroFilter  
    org.springframework.web.filter.DelegatingFilterProxy
      
         
        targetFilterLifecycle  
        true  
      
  
  
    shiroFilter  
    /*  
  第二步:配置spring-shiro.xml
      
  
      
   
      
      
      
  
      
      
  
      
      
      
      
      
      
      
      
      
      
      
      
         
             /mydemo/login=anon  
             /mydemo/getVerifyCodeImage=anon  
             /main**=authc  
             /user/info**=authc  
         
      
   
  
  
        
        
         
       第三步:自定义的Realm类
public class ShiroRealm extends AuthorizingRealm{
@Autowired
private UserInfoService userInfoService;
/**
* “授权”查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
* @param principals
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection collection) {
SimpleAuthorizationInfo info = null;
/*String username = (String) collection.fromRealm(getName()).iterator().next();
/*User userInfo =userService.getById(username);
Criteria criteria=new Criteria();
criteria.put("userId", userInfo.getId());
if (userInfo != null) {
//权限控制
info = new SimpleAuthorizationInfo();
List moKuais=this.kuaiService.findListByUserId(criteria);
String method = null;
String permissioin = null;
for (MoKuai item : moKuais) {
permissioin = item.getPrivPermissioin();
if(!StringHelper.isNullOrEmpty(permissioin)){
permissioin = permissioin.trim();
info.addStringPermission(permissioin);
}
}
}*/
return info;
}
/**
* “认证”回调函数,登录时调用.
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken=(UsernamePasswordToken) token;
UserInfo userInfo =userInfoService.getUserInfoByAccount(usernamePasswordToken.getUsername());
SimpleAuthenticationInfo info = null;
if (userInfo != null) {
//其他验证
info =  new SimpleAuthenticationInfo(usernamePasswordToken.getUsername(), usernamePasswordToken.getPassword(), getName());
}
//身份认证验证成功,返回一个AuthenticationInfo实现;  
return info;
}
/**
* 更新用户授权信息缓存.
*/
public void clearCachedAuthorizationInfo(String principal) {
SimplePrincipalCollection principals = new SimplePrincipalCollection(principal, getName());
clearCachedAuthorizationInfo(principals);
}
/**
* 清除所有用户授权信息缓存.
*/
public void clearAllCachedAuthorizationInfo() {
Cache cache = getAuthorizationCache();
if (cache != null) {
for (Object key : cache.keys()) {
cache.remove(key);
}
}
}
}  

  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637061-1-1.html 上篇帖子: centos7 apache2.4 测试 下篇帖子: Linux centos 下apache(httpd)编译安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表