Apache Shiro 快速入门教程,shiro 基础教程

匿名 (未验证) 提交于 2019-12-03 00:18:01

第一部分 什么是Apache Shiro



1、什么是 apache shiro :


Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理

spring



2、Apache Shiro 的三大核心组件:


1、Subject :当前用户的操作

2、SecurityManager:用于管理所有的Subject

3、Realms:用于进行权限信息的验证


Subject:即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Subject 不仅仅代表某个用户,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。

SecurityManager:即所有Subject的管理者,这是Shiro框架的核心组件,可以把他看做是一个Shiro框架的全局管理组件,用于调度各种Shiro框架的服务。

Realms:Realms则是用户的信息认证器和用户的权限人证器,我们需要自己来实现Realms来自定义的管理我们自己系统内部的权限规则。



3、Authentication 和 Authorization


在shiro的用户权限认证过程中其通过两个方法来实现:

1、Authentication:是验证用户身份的过程。

2、Authorization:是授权访问控制,用于对用户进行的操作进行人证授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。




4、其他组件:


除了以上几个组件外,Shiro还有几个其他组件:

1、SessionManager :Shiro为任何应用提供了一个会话编程范式。






图片转自:http://kdboy.iteye.com/blog/1154644



第二部分 Apache Shiro 整合Spring的Web程序构建


1、准备工具:


hibernate来对数据持久层进行操作

控制显示层框架:SpringMVC 这边我使用了SpringMVC实际开发中也可以是其他框架

MySQL

准备好所需要的jar放到项目中。


2、创建数据库:



首先需要四张表,分别为 user(用户)、role(角色)、permission(权限)、userRole(用户角色关系表)

这边分别创建四张表的实体类,通过Hiberantehibernate.hbm2ddl.auto属性的update


  1. /***
  2. @Table"t_user"
  3. @Entity
  4. publicclass
  5. @Id
  6. @GeneratedValue
  7. //多对多用户权限表
  8. @OneToMany"user"

  1. /****
  2. @Entity
  3. @Table"t_role"
  4. publicclass
  5. @Id
  6. @GeneratedValue
  7. /**角色名**/
  8. /**角色说明**/

  1. /****
  2. @Entity
  3. @Table"t_permission"
  4. publicclass
  5. @Id
  6. @GeneratedValue
  7. /**token**/
  8. /**资源url**/
  9. /**权限说明**/
  10. /**所属角色编号**/

  1. /***
  2. @Entity
  3. @Table"t_user_role"
  4. publicclass
  5. @Id
  6. @GeneratedValue
  7. @ManyToOne
  8. @JoinColumn"userId"true
  9. @ManyToOne
  10. @JoinColumn"roleId"true

3、编写操作用户业务的Service:


  1. @Service
  2. publicclass
  3. /****
  4. public
  5. new
  6. return
  7. /***
  8. public
  9. "调用"
  10. ifnull
  11. returnnull
  12. new
  13. for
  14. new
  15. for
  16. return
  17. @Autowired
  18. private



4、编写shiro组件自定义Realm:


  1. package
  2. import
  3. import
  4. import
  5. import
  6. import
  7. import
  8. import
  9. import
  10. import
  11. import
  12. import
  13. import
  14. /****
  15. publicclassextends
  16. /***
  17. @Override
  18. protected
  19. //根据自己系统规则的需要编写获取授权信息,这里为了快速入门只获取了用户对应角色的资源url信息
  20. ifnull
  21. ifnull
  22. new
  23. for
  24. //将权限资源添加到用户信息中
  25. return
  26. returnnull
  27. /***
  28. @Override
  29. protectedthrows
  30. ifnull""
  31. ifnull
  32. returnnew
  33. returnnull
  34. /**用户的业务类**/
  35. private
  36. public
  37. return
  38. publicvoid
  39. this

上述类继承了Shiro的AuthorizingRealm类 实现了AuthorizationInfoAuthenticationInfo两个方法,用于获取用户权限和认证用户登录信息


5、编写LoginController:



  1. package
  2. import
  3. import
  4. import
  5. import
  6. import
  7. import
  8. import
  9. import
  10. import
  11. import
  12. /****
  13. @Controller
  14. publicclass
  15. /***
  16. @RequestMapping"toLogin"
  17. public
  18. return"login"
  19. /***
  20. @RequestMapping"login"
  21. public
  22. new
  23. ifnull
  24. "toLogin"
  25. "msg""用户不存在"
  26. return
  27. if
  28. "toLogin"
  29. "msg""账号密码错误"
  30. return
  31. new
  32. "redirect:/home"
  33. return
  34. @Autowired
  35. private


6、编写信息认证成功后的跳转页面:


  1. package
  2. import
  3. import
  4. @Controller
  5. publicclass
  6. @RequestMapping("home"
  7. public
  8. "登录成功"
  9. return"home"


7、Shiro的配置文件.xml


  1. "shiroFilter"class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"
  2. "securityManager""securityManager"
  3. "loginUrl""/toLogin"
  4. "successUrl""/home"
  5. "unauthorizedUrl""/403"
  6. "filterChainDefinitions"
  7. "myShiroRealm"class="org.swinglife.shiro.MyShiroRealm"
  8. "accountService""accountService"
  9. "securityManager"class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"
  10. "realm""myShiroRealm"
  11. "accountService"class="org.swinglife.service.AccountService"
  12. "shiroCacheManager"class="org.apache.shiro.cache.ehcache.EhCacheManager"
  13. "cacheManager""cacheManager"



loginUrl 用于配置登陆页

successUrl 用于配置登录成功后返回的页面,不过该参数只会在当登录页面中并没有任何返回页面时才会生效,否则会跳转到登录Controller中的指定页面。

unauthorizedUrl 用于配置没有权限访问页面时跳转的页面


filterChainDefinitions:apache shiro通过filterChainDefinitions参数来分配链接的过滤,资源过滤有常用的以下几个参数:

1、authc 表示需要认证的链接

2、perms[/url] 表示该链接需要拥有对应的资源/权限才能访问

3、roles[admin] 表示需要对应的角色才能访问

4、perms[admin:url] 表示需要对应角色的资源才能访问


8、登陆页login.jsp

  1. <body>
  2. <h1></h1>
  3. <formaction="login"method="post">
  4. username:<inputtype="text"name="username"><p>
  5. password:<inputtype="password"name="password">
  6. <p>
  7. <inputtype="submit"value="submit">
  8. </form>
  9. </body>




9、运行程序

在数据库中添加一条用户、角色、以及权限数据,并且在关联表中添加一条关联数据:










转载出处:

最后输入 账号密码 就会跳转

shiro jar:http://download.csdn.net/detail/swingpyzf/8766673

项目源码:github:https://github.com/swinglife/shiro_ex

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!