shiroConfig和UserRealm的写法

 shiroConfig的写法


@Configuration
public class ShiroConfig {



//    ShiroFilterFactoryBean

    @Bean(name = "shiroFilterFactoryBean")
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager getDefaultWebSecurityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//        设置安全管理器
        bean.setSecurityManager(getDefaultWebSecurityManager);
        //添加shiro的内置过滤器
/*
 * anon---匿名拦截器----,即不需要登录即可访问,一般用于静态资源过滤。
 * authc---基于表单的拦截器,如果没有登录会跳转到相应的登录页面登录。
 * user---用户拦截器--用户已经身份验证/记住我登录的都可。
 * perms--权限授权拦截器--验证用户是否拥有所有权限
 * roles--角色授权拦截器--验证用户是否拥有所有角色
 */
        Map<String,String> filterMap=new LinkedHashMap<>();

        //授权操作,未授权的话,会跳转到某个页面
        filterMap.put("/user/add","perms[user:add]");//直接限制


        filterMap.put("/user/*","authc");
        bean.setFilterChainDefinitionMap(filterMap);
//        设置登录方式
        bean.setLoginUrl("/toLogin");

        //未授权的页面
        bean.setUnauthorizedUrl("/noauth");
        return bean;
    }


//    DafaultWebSecurityManager
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //关联UserRealm
        securityManager.setRealm(userRealm);
        return  securityManager;
    }
//   创建realm对象,需要自定义一个类:1
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
//    整合shiro和theleaf的整合shiroDialect,
    @Bean
    public ShiroDialect getShiroDialect(){
        return new ShiroDialect();
    }

}

 userRealm的写法

public class UserRealm extends AuthorizingRealm {
    @Autowired
    UserServiceImpl userService;
    @Override//授权验证
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("执行了==>授权的操作doGetAuthorizationInfo1");
        //SimpleAuthrizationInfo用于向用户授权的类对象,这里获取对象
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();//将角色和权限信息设置到SimpleAuthorizationInfo
        Subject subject = SecurityUtils.getSubject();//获取当前的对象
        User principal = (User)subject.getPrincipal();//获得当前对象的唯一标识符号,是任意的形式
        //给用户添加权限
        info.addStringPermission(principal.getPerms());//获得user权限,并赋予当钱请求需要授权才能访问的资源用户
        return info;
        将SimpleAuthorizationInfo,即对于用户的授权信息返回,如果我们在上面进行的授权操作授予的权限/用户本身具有的权限包括了请求当前资源的权限,那么资源请求成功,如果不包含就请求失败

    }
//那小伙在登录,他已经给我说了他的身份证信息(参数AuthenticationToken),你把那小伙的身份证复印件给我,辨认、放行、驱赶的事交给我了
    @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;//抛出异常
        }
        System.out.println("登陆成功");
        //密码认证,shiro做,不用你
        //return 传出user对象
        System.out.println(new SimpleAuthenticationInfo(user,user.getPwd(),""));//user对象h是从数据库中传出
        return new SimpleAuthenticationInfo(user,user.getPwd(),"");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值