zoukankan      html  css  js  c++  java
  • 2020-02-26

    庚子鼠年 戊寅月 戊寅日

    描述

    springboot练习

    随笔

    spring安全

    shiro

    添加shiro的内置过滤器

    /admins/**=anon # 表示该 uri 可以匿名访问
    /admins/**=auth # 表示该 uri 需要认证才能访问
    /admins/**=authcBasic # 表示该 uri 需要 httpBasic 认证
    /admins/**=perms[user:add:*] # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问
    /admins/**=port[8081] # 表示该 uri 需要使用 8081 端口
    /admins/**=rest[user] # 相当于 /admins/**=perms[user:method],其中,method 表示 get、post、delete 等
    /admins/**=roles[admin] # 表示该 uri 需要认证用户拥有 admin 角色才能访问
    /admins/**=ssl # 表示该 uri 需要使用 https 协议
    /admins/**=user # 表示该 uri 需要认证或通过记住我认证才能访问
    /logout=logout # 表示注销,可以当作固定配置
    

    注意:

    anon,authcBasic,auchc,user 是认证过滤器。

    perms,roles,ssl,rest,port 是授权过滤器。

    自定义 Realm

    上边的程序使用的是 Shiro 自带的 IniRealm,而 IniRealm 从 ini 配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义 realm

    Shiro 为我们提供了如下 Realm:

    image

    其中,最基础的是 Realm 接口,CachingRealm 负责缓存处理,

    AuthenticationRealm 负责认证,

    AuthorizingRealm负责授权,

    通常自定义的 realm 继承 AuthorizingRealm

    package chang.config;
    
    import chang.pojo.Permissions;
    import chang.pojo.Role;
    import chang.pojo.User;
    import chang.service.LoginService;
    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;
    import org.springframework.beans.factory.annotation.Autowired;
    
    public class ChangRealm extends AuthorizingRealm {
    
        @Autowired
        private LoginService loginService;
    
        // 授权
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            //获取登录用户名
            String name = (String) principalCollection.getPrimaryPrincipal();
            //根据用户名去数据库查询用户信息
            User user = loginService.getUserByName(name);
            //添加角色和权限
            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
            for (Role role : user.getRoles()) {
                //添加角色
                simpleAuthorizationInfo.addRole(role.getRoleName());
                //添加权限
                for (Permissions permissions : role.getPermissions()) {
                    simpleAuthorizationInfo.addStringPermission(permissions.getPermissionsName());
                }
            }
            return simpleAuthorizationInfo;
        }
    
    
        // 登录
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
            //加这一步的目的是在Post请求的时候会先进认证,然后在到请求
            if (authenticationToken.getPrincipal() == null) {
                return null;
            }
            //获取用户信息
            String name = authenticationToken.getPrincipal().toString();
            User user = loginService.getUserByName(name);
            if (user == null) {
                //这里返回后会报出对应异常
                return null;
            } else {
                //这里验证authenticationToken和simpleAuthenticationInfo的信息
                SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(name, user.getPassword().toString(), getName());
                return simpleAuthenticationInfo;
            }
        }
    }
    

    swagger

    异步任务

    邮件任务

    分布式RPC

    微服务

    Dubbo和Zookeeper

    Dubbo-admin

  • 相关阅读:
    IEE754算法
    EQ控制卡二次开发(火凤凰、蓝精灵异步单双色控制卡卡)
    康耐德C2000开关量采集
    初次了解MVC框架模式
    jQuery常用事件
    jQuery做一个小小的移动图片的位置
    jQuery关于复选框的基本小功能
    WebRequest类: WebRequest类是.NET.Framework的请求/响应模型的抽象基类,用于访问Internet数据
    .net与三层的异同
    mvc基础
  • 原文地址:https://www.cnblogs.com/chang1024/p/12369659.html
Copyright © 2011-2022 走看看