shiro授权操作

ShiroConfig:
先设置相应权限操作

	perms:拥有对某个资源的权限才能访问;
//设置权限,				
        filterMap.put("/user/add","perms[user:add]");
        filterMap.put("/user/update","perms[user:update]");

添加一个页面 提示未授权

“未经授权,无法访问页面”

MyController:

@RequestMapping("/noauth")
    @ResponseBody
    public String unauthorized() {
        return "未经授权,无法访问页面";
    }

接下来在ShiroConfig:中设置:

//设置未授权要跳转的页面
   bean.setUnauthorizedUrl("/noauth");

给数据库添加权限字段,perms

接下来在UserRealm:中给用户授予相应权限

自定义的UserRealm
public class UserRealm  extends AuthorizingRealm {

    @Autowired
    UserService userService;

    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("执行了授权 doGetAuthorizationInfo");

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

        //拿到当前登录的这个对象:
        Subject subject = SecurityUtils.getSubject();
        User currentUser = (User) subject.getPrincipal();//拿到user对象

        //给用户添加上相应的权限(来自数据库中的perms字段)
        info.addStringPermission(currentUser.getPerms());

        return info;
    }

    //认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        System.out.println("执行了认证 doGetAuthenticationInfo");

        UsernamePasswordToken userToken = (UsernamePasswordToken) token;

        //连接真实数据库
        User user = userService.queryUserByName(userToken.getUsername());

        if (user==null) {
            return null;//抛出异常 UnknownAccountException
        }
       
        //SimpleAuthenticationInfo:(参数)三个 或者四个
                //userInfo, //
                    //  用户名–此处传的是用户对象  直接通过token.getPrincipal()方法获取—获取当前记录的用户名,从这个用户名获取一系列的对应需求属性。
                    //  这里传入user 在上面授权中就可以使用
                //userInfo.getPassword(), //密码—从数据库中获取的密码
                //salt, 盐–用于加密密码对比
                //getName() //当前的realm名

        return new SimpleAuthenticationInfo(user,user.getPwd(),"");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值