java基础shrio+cas我爱编程

Apache Shrio

2017-08-02  本文已影响0人  亭台雨榭111

一 Apache Shrio 是干什么的?

图片.png

Apache Shiro 可以不依赖任何技术使用, 通常在企业中和Spring 结合使用

二 shrio的执行流程

图片.png

三 shrio 在maven项目中如何使用
首先我们说shrio分为一下两块:
Authentication ,认证 ,用户控制用户登录
Authorization ,授权, 用户进行权限管理
现在我们将spring与shrio进行整合
1.创建我们的shrio模块

图片.png

2.父模块配置

图片.png

3.导入我们的依赖

图片.png

4.web层导入依赖

图片.png

5.web.xml中进行配置shiro的过滤器

图片.png

6.创建shrio的配置application-shrio.xml文件

<bean id="shiroSecurityFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

<property name="securityManager" ref="securityManager" />

<property name="loginUrl" value="/login.jsp" />

<property name="successUrl" value="/index.jsp" />

<property name="unauthorizedUrl" value="/unauthorized.jsp" />


<property name="filterChainDefinitions">
<value>
/css/** = anon
/demo/** = anon
/images/** = anon
/js/** = anon
/json/** = anon
/login.jsp** = anon
/index.jsp** = authc
/validatecode.jsp** = anon
/user/userAction_login** = anon
/user/userAction_validCheckCode** = anon
/** = authc // 除了上述配置 其他资源必须需要身份认证 (登陆)
</value>
</property>
</bean>

<!-- 安全管理器 -->
<bean id="securityManager" 
    class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <!-- 在安全管理器,应该注入 Realm 连接安全数据  -->
</bean>

7.用户身份认证编码
第一步:修改UserAction中的login方法:

图片.png

第二部:需要为SecurityManager 提供 Realm 作用: 数据源桥梁! 根据令牌对象数据(请求用户数据) ---> Realm 获取到令牌(账号和密码)!--->调用数据库..真实用户名和密码,自定义Realm 继承 AuthorizingRealm (提供 认证、授权功能 )将我们的Realm注入给安全管理器对象

图片.png

第三步:
BOSRealm 实现认证方法 BOSRealm extends AuthorizingRealm 重写doGetAuthetication方法 完成用户身份识别认证!

图片.png

注意:
因为shiro的认证失败是抛出异常,因此,我们需要try {}catch(){}一下
8.授权:,代码如下
@Autowired
private FacadService facadService;
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection collection) {
//如何进行授权,通过AuthorizationInfo进行授权

     SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    //1.获取当前用户
    Subject subject = SecurityUtils.getSubject();
     User user = (User) subject.getPrincipal();
    //如果是超级管理员
     if("123456@163.com".equalsIgnoreCase(user.getEmail())){
        List<Role> roles =  facadService.getRoleService().findAll();
        for (Role role : roles) {
            info.addRole(role.getCode());
        }
        List<Function> functions = facadService.getFunctionService().findAll();
        for (Function function : functions) {
            info.addStringPermission(function.getCode());
        }
     }else{
         if(user!=null) {
             List<Role> list =facadService.getRoleService().findRolesByUserId(user.getId());
            for (Role role : list) {
                String code = role.getCode();
                info.addRole(code);
                Set<Function> functions = role.getFunctions();
                for (Function function : functions) {
                    info.addStringPermission(function.getCode());
                }
            }
         }      
        
    }
     
    return info;
}

在application-shrio.xml中
配置权限过滤如下列:
/page_base_staff** = roles["common"]

上一篇下一篇

猜你喜欢

热点阅读