【Apache Shiro】学习笔记三

如何给Java环境配置最简单的Shiro环境

@Bean
public SecurityManager securityManager(){
    DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();
    //设置realm.
    securityManager.setRealm(userRealm());
    // 自定义缓存实现 使用redis
    if(Constant.CACHE_TYPE_REDIS.equals(cacheType)){
        securityManager.setCacheManager(cacheManager());
    }else {
        securityManager.setCacheManager(ehCacheManager());
    }
    securityManager.setSessionManager(sessionManager());
    return securityManager;
}

    核心代码是前两行,讲Realm内置到SecurityManaager就可以了。因为Realm像前文讲的一样,是与系统交互的主要桥梁。

给Shiro设置Filter

@Bean
   ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
   ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
   shiroFilterFactoryBean.setSecurityManager(securityManager);
   shiroFilterFactoryBean.setLoginUrl("/login");
   shiroFilterFactoryBean.setSuccessUrl("/index");
   shiroFilterFactoryBean.setUnauthorizedUrl("/403");
   LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
   filterChainDefinitionMap.put("/login", "anon");
   filterChainDefinitionMap.put("/css/**", "anon");
   filterChainDefinitionMap.put("/js/**", "anon");
   filterChainDefinitionMap.put("/fonts/**", "anon");
   filterChainDefinitionMap.put("/img/**", "anon");
   filterChainDefinitionMap.put("/docs/**", "anon");
   filterChainDefinitionMap.put("/druid/**", "anon");
   filterChainDefinitionMap.put("/upload/**", "perms[act:model:edit]");
   filterChainDefinitionMap.put("/student/**","roles["admin,normal,assistant"]");
   filterChainDefinitionMap.put("/logout", "logout");
   filterChainDefinitionMap.put("/", "anon");
   filterChainDefinitionMap.put("/**", "authc");
   shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
   return shiroFilterFactoryBean;
}

Filter主要是给Shiro设置一切基础策略,也可以用配置文件进行配置,不过依然是需要重启应用才能生效的。

anno代表不需要授权即可访问,对于静态资源,访问权限都设置为anno

authc表示需要登录才可访问

perms[act:model:edit] 权限配置

roles["admin,normal,assistant"] 角色配置

注:非鉴权接口需要在这里面配置

Realm的一个实现

1.创建类继承  AuthorizingRealm(org.apache.shiro.realm.AuthorizingRealm)

    使用此类作为父类的原因我们可以看到,其已经继承了身份认证的Realm父类

public abstract class AuthorizingRealm extends AuthenticatingRealm implements Authorizer, Initializable, PermissionResolverAware, RolePermissionResolverAware

    实现doGetAuthorizationInfo方法

    该方法主要是返回授权的信息,一般的做法是,用户通过认证之后,需要知道用户都有哪些页面或者哪些操作的授权。

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.setStringPermissions(perms);

    实现doGetAuthenticationInfo方法

    该方法主要是做身份认证的时候的判断逻辑

// 账号不存在
if (user == null) {
   throw new UnknownAccountException("账号或密码不正确");
}

// 密码错误
if (!password.equals(user.getPassword())) {
   throw new IncorrectCredentialsException("账号或密码不正确");
}

// 账号锁定
if (user.getStatus() == 0) {
   throw new LockedAccountException("账号已被锁定,请联系管理员");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());

其他的方法逻辑还有很多,根据需要实现的业务逻辑添加重写即可,后面使用到了再增加文档

转载于:https://my.oschina.net/u/1472720/blog/2987624

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值