`
想起要学好java
  • 浏览: 8695 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

shiro学习总结

 
阅读更多
shiro学习参考文档:
 
 
 
shiro框架:
1、Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:configDefault/shiro.properties");
先通过一个连接数据源(如shiro.properties代表一个文本的数据源),创建一个SecurityManager的Factory。
2、SecurityManager securityManager = factory.getInstance();
获得SecurityManager,这个是shiro的核心组件,
SecurityManager是安全管理器。即所有与安全有关的操作都会与 SecurityManager 交互,且它管理着所有 Subject。可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互,
如果学习过 SpringMVC,我们可以把它看成 DispatcherServlet 前端控制器。
3、SecurityUtils.setSecurityManager(securityManager);
将securityManager设置到SecurityUtils里。
4、Subject currentUser = SecurityUtils.getSubject();
通过SecurityUtils拿到Subject,Subject就相当于是要登录的用户,
主体,代表了当前“用户”。这个用户不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等。所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager。
我们可以把 Subject 认为是一个门面,SecurityManager 才是实际的执行者。
5、UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "zhangsan");
登录,通过用户名和密码生成一个Token
6、token.setRememberMe(true);
RemeberMe设为true,表明记住登录状态,下次就不要再登录了。
7、
try {
currentUser.login(token);
} catch (UnknownAccountException uae) {
System.out.println("用户名不存在:" + token.getPrincipal());
} catch (IncorrectCredentialsException ice) {
System.out.println("账户密码 " + token.getPrincipal()  + " 不正确!");
} catch (LockedAccountException lae) {
System.out.println("用户名 " + token.getPrincipal() + " 被锁定 !");
}
subject.login(token),就可以验证用"zhangsan", "zhangsan"为用户名和密码的token是否存在并且正确。因为currentUser是通过securityManager获得的,
而securityManager是连上了shiro数据源(classpath:configDefault/shiro.properties)的。所以可以判断"zhangsan"是否在数据源中并且密码是否正确。
8、
// 认证成功后
if (currentUser.isAuthenticated()) {
    System.out.println("用户 " + currentUser.getPrincipal() + " 登陆成功!");
    //测试角色
    System.out.println("是否拥有 manager 角色:" + currentUser.hasRole("manager"));
    //测试权限
    System.out.println("是否拥有 user:create 权限" + currentUser.isPermitted("user:create"));
    //退出
    currentUser.logout();
}
currentUser.getPrincipal(),currentUser.hasRole("manager"),currentUser.isPermitted("user:create")这些都是subject的方法,根据数据源里的内容来判断user是否有相关的角色和权限。
 
shiro和spring整合使用。
一、先要添加maven包依赖
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>${shiro-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-web</artifactId>
    <version>${shiro-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-ehcache</artifactId>
    <version>${shiro-version}</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>${shiro-version}</version>
</dependency>
二、要web.xml里配置shiroFilter
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 -->
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里配置一个shiro的过滤器,所有的请求都要在shiroFilter过滤。
三、就是配置spring-shiro.xml了。
<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 必须设置是shiro的核心部分 -->
<property name="securityManager" ref="securityManager"/>
<!-- 这三个是可选配置 -->
<property name="loginUrl" value="/login"/>
<property name="successUrl" value="/main"/>
<property name="unauthorizedUrl" value="/unauthorized"/>
<!-- 这个表示相应的权限对应的url需要经过的过滤器 -->
<property name="filters">
    <util:map>
<!-- 定义auth需要通过captchaFormFilter这个过滤器认证 -->
<entry key="auth" value-ref="captchaFormFilter" />
    </util:map>
</property>
<!-- 需要过滤的权限定义 -->
<property name="filterChainDefinitions">
    <value>
<!-- anon表示url不需要进行认证 -->
/monitor/**=anon
/favicon.ico=anon
/ui/**=anon
/js/**=anon
/css/**=anon
/images/**=anon
<!-- auth表示url需要通过认证才能访问 -->
/**=auth
/logout=logout
    </value>
</property>
</bean>
注:这里定义的id=shiroFilter名字必须和web.xml里定义的filter的id名字一样。
 
<!-- 定义过滤器,相关权限对应的url必须通过此过滤器 -->
<bean id="captchaFormFilter" class="cn.lmw.job.console.shiro.CustomerFormAuthenFilter">
        <property name="validateCaptcha" value="false" />
        <property name="successUrl" value="/main" />
</bean>
 
<!-- 安全管理器,这是shiro的核心控件 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="userRealm"/>
        <property name="sessionManager" ref="sessionManager"/>
        <property name="cacheManager" ref="cacheManager"/>
</bean>
 
<!-- 缓存管理器 -->
<bean id="cacheManager" class="cn.lmw.freamwork.support.shiro.cache.SpringCacheManagerWrapper">
        <property name="cacheManager" ref="springCacheManager"/>
</bean>
  
<!-- 凭证匹配器 -->
<bean id="credentialsMatcher" class="cn.lmw.freamwork.support.shiro.credentials.RetryLimitHashedCredentialsMatcher">
        <constructor-arg ref="cacheManager"/>
        <property name="hashAlgorithmName" value="md5"/>
        <property name="hashIterations" value="2"/>
        <property name="storedCredentialsHexEncoded" value="true"/>
</bean>
<!-- Realm实现 -->
<bean id="userRealm" class="cn.lmw.job.console.shiro.realm.UserRealm">
        <property name="credentialsMatcher" ref="credentialsMatcher"/>
        <property name="cachingEnabled" value="false"/>
</bean>
分享到:
评论

相关推荐

    权限管理shiro学习总结

    【权限管理框架Shiro学习总结】 在IT领域,权限管理是一个关键的安全机制,它确保了只有合法的用户才能访问特定的资源。Apache Shiro是一个强大且易用的Java安全框架,提供认证、授权、会话管理和加密等功能。下面...

    shiro学习心得

    ### Shiro 学习心得与应用实践 #### 一、Shiro 认证与权限管理基础 Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证(Authentication)、授权(Authorization)、加密(Cryptography)以及会话管理...

    Shiro_学习总结.zip

    这个“Shiro_学习总结.zip”文件包含了一个 PDF 文档,很可能是对 Shiro 框架核心概念、功能以及使用方法的详尽总结。 在 Shiro 中,主要涉及以下几个核心组件: 1. **认证(Authentication)**:这是验证用户身份...

    吴天雄--shiro个人总结笔记.doc

    Shiro因其简单易用而受到青睐,相比于依赖Spring的Spring Security,Shiro的学习曲线更低。 Shiro的主要组成部分包括: 1. **Authentication**:身份认证,确认用户身份是否有效,通常涉及登录过程。 2. **...

    shiro入门学习.ppt

    总结一下,Shiro的核心组件包括: 1. Subject:代表用户。 2. SecurityManager:是Shiro的核心,协调各组件工作。 3. Authenticator:处理用户登录验证。 4. Authorizer:决定用户的角色和权限。 5. SessionManager...

    ssm整合shiro的简单学习demo

    总结来说,这个"ssm整合shiro的简单学习demo"是一个很好的实践教程,它帮助开发者理解如何在实际项目中集成这三个流行的框架和Shiro安全框架,从而更好地掌握Web应用的安全控制。通过学习和实践这个demo,你可以提升...

    shiro权限案例demo

    总结起来,这个"shiro权限案例demo"是一个全面展示如何使用Apache Shiro实现在Java应用程序中进行用户权限管理的实例。它涵盖了认证、授权、会话管理和过滤器的使用,对于理解和应用Shiro的安全机制非常有帮助。通过...

    shiro框架教案+笔记+sql脚本+项目案例

    总的来说,这个压缩包提供的资源为学习和掌握Apache Shiro提供了一个全方位的平台,从基础理论到实战演练,覆盖了Shiro学习的全过程。对于想要提升安全开发技能或者正在使用或考虑使用Shiro的人来说,这是一个宝贵的...

    shiro

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、会话管理和加密等核心功能。...通过对 Shiro 源码的学习和实践,我们可以更好地理解和利用其功能,提升项目的安全性和可维护性。

    struts2和shiro完美整合解决方案

    总结一下,Struts2和Shiro的整合提供了完整的Web应用安全解决方案,包括用户认证、授权、会话管理和权限控制。通过合理配置和使用,开发者可以构建出安全、易用的Java Web应用。提供的压缩包"shirodemo"应包含了一个...

    Shiro-pdf教程

    总结来说,Apache Shiro 是一个全面的安全框架,能够满足各种类型应用程序的安全需求,提供简洁的API来处理复杂的安全问题。无论是小型桌面应用还是大型分布式系统,Shiro 都能轻松集成并确保其安全。

    shirodemo(spring3+shiro)(认证授权)

    总结,"shirodemo"项目展示了Spring3与Shiro 结合进行用户认证与授权的实例,涵盖了Shiro的核心功能和实际应用场景。通过学习和实践,开发者可以快速掌握如何在自己的项目中运用Shiro来构建安全体系。

    Shiro入门实例

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,...这个"Shiro入门实例"是学习和掌握Shiro的良好起点,通过实践可以加深对Shiro的理解,为构建安全的Java应用程序打下坚实基础。

    shiro权限(1)

    通过对Shiro权限管理的学习,我们不仅了解了其基本原理,还掌握了如何在实际项目中运用这些原理来实现用户认证和授权。Shiro作为一个强大而灵活的安全框架,可以帮助开发者轻松构建安全可靠的Web应用。无论是初学者...

    shiro权限管理实例

    总结起来,"shiro权限管理实例"为我们提供了一个学习Shiro权限控制的实践平台。通过这个实例,我们可以了解如何设置身份验证、授权、会话管理和加密,这对于任何需要用户权限管理的Java应用都是非常有价值的。

    springboot-shiro-demo_mybatisplus_DEMO_shiro权限管理_

    总结来说,"springboot-shiro-demo_mybatisplus_DEMO_shiro权限管理_"项目是一个使用Spring Boot作为基础框架,结合Shiro进行权限控制,借助MyBatis Plus简化数据库操作的示例。通过这个项目,开发者可以学习到如何...

    shiro视频教程-最全,通俗易懂

    通过上述知识点的学习,Java开发者及相关专业和技术爱好者将能够深入理解Shiro框架的核心概念与工作原理,并能够运用到实际项目开发中,实现用户认证、授权、加密等功能,从而提升项目的整体安全性和用户体验。

    shiro认证授权

    通过分析和运行 `shiro-demo`,你可以更好地理解 Shiro 的实际应用场景,并学习如何在自己的项目中使用 Shiro 实现认证和授权功能。 总结,Apache Shiro 是一个功能丰富的安全框架,能够轻松处理认证、授权、加密和...

Global site tag (gtag.js) - Google Analytics