zoukankan      html  css  js  c++  java
  • 自定义Realm

    import java.util.List;

    import javax.annotation.Resource;

    import org.apache.shiro.SecurityUtils;
    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.authc.UnknownAccountException;
    import org.apache.shiro.authc.UsernamePasswordToken;
    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 MyRealm extends AuthorizingRealm {

    @Resource
    private PermissionService permissionService;


    @Resource
    private UserService userService;

    /**
    * 只有需要验证权限时才会调用, 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.在配有缓存的情况下,只加载一次.
    */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    //System.out.println("***********************开始授权");
    //String loginName = SecurityUtils.getSubject().getPrincipal().toString();
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    User user = (User) principalCollection.getPrimaryPrincipal();
    if (user != null) {
    //String userId = SecurityUtils.getSubject().getSession().getAttribute("userSessionId").toString();
    List<Permission> rs = permissionService.getUserPermission(user.getId());
    // 权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)
    //SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    // 用户的角色对应的所有权限,如果只使用角色定义访问权限
    //System.out.println("获取用户权限验证权限");
    for (Permission permission : rs) {
    //System.out.println(permission.getFunctionUrl());
    info.addStringPermission(permission.getFunctionUrl());
    }

    return info;
    }
    return null;
    }

    /**
    * 认证回调函数,登录时调用
    */
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException{
    //System.out.println("######################开始认证");
    User user2 = new User();
    UsernamePasswordToken token = (UsernamePasswordToken)arg0;
    String username = token.getUsername();
    String pwd = new String(token.getPassword());
    user2.setUserName(username);
    user2.setPassword(pwd);
    //System.out.println(pwd);
    User user= userService.load(user2);
    if (user != null) {
    SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, pwd, getName());
    return info;
    } else {
    throw new UnknownAccountException();// 没找到帐号
    }
    }
    /**
    * 更新用户授权信息缓存.
    */
    public void clearCachedAuthorizationInfo(PrincipalCollection principals) {
    super.clearCachedAuthorizationInfo(principals);
    }
    /**
    * 更新用户信息缓存.
    */
    public void clearCachedAuthenticationInfo(PrincipalCollection principals) {
    super.clearCachedAuthenticationInfo(principals);
    }

    /**
    * 清除用户授权信息缓存.
    */
    public void clearAllCachedAuthorizationInfo() {
    getAuthorizationCache().clear();
    }

    /**
    * 清除用户信息缓存.
    */
    public void clearAllCachedAuthenticationInfo() {
    getAuthenticationCache().clear();
    }

    /**
    * 清空所有缓存
    */
    public void clearCache(PrincipalCollection principals) {
    super.clearCache(principals);
    }


    /**

    * 清空所有认证缓存
    */
    public void clearAllCache() {
    clearAllCachedAuthenticationInfo();
    clearAllCachedAuthorizationInfo();
    }

    /**
    *
    * @Title: clearAuthz
    * @Description: TODO()
    * @param 自定义清空权限 并重新获取权限
    * @return void 返回类型
    * @throws
    */
    public void clearAuthz(){
    this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());
    }

    }

  • 相关阅读:
    手写Promise(转)
    阻止element组件中的<el-input/>的粘贴功能(转)
    js 对象深拷贝函数
    20182301 2019-2020-1《程序设计与数据结构》课程总结
    20182301 2019-2020-1 《数据结构与面向对象程序设计》实验9报告
    团队博客第二周——DIG
    20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结
    《团队作业第一周》团队作业——DIG
    20182301 2019-2020-1 《数据结构与面向对象程序设计》哈夫曼实验报告
    20182301 2019-2020-1 《数据结构与面向对象程序设计》第9周学习总结
  • 原文地址:https://www.cnblogs.com/hopeful8859-1/p/7503674.html
Copyright © 2011-2022 走看看