shiro

【SpringShiro】Shiro 基础教程

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、前言 Apache Shiro 是 Java 的一个安全框架。功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。 二、介绍 2.1 功能特点 Shiro 包含 10 个内容,如下图: 1) Authentication:身份认证/登录,验证用户是不是拥有相应的身份。 2) Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。 3) Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的。 4) Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。 5) Web Support:Web支持,可以非常容易的集成到 web 环境。 6) Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率。 7) Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去。 8) Testing:提供测试支持。 9) Run As

Shiro简单使用

匿名 (未验证) 提交于 2019-12-03 00:22:01
Introduction to Apache Shiro What is Apache Shiro? Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应该尽可能掩盖复杂的地方,露出一个干净而直观的 API ,来简化开发人员在使他们的应用程序安全上的努力。以下是你可以用 Apache Shiro 所做的事情: 验证用户来核实他们的身份 对用户执行访问控制,如: 判断用户是否被分配了一个确定的安全角色 判断用户是否被允许做某事 在任何环境下使用 Session API ,即使没有 Web 或 EJB 容器。 在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。 聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。 启用单点登录( SSO )功能。 为没有关联到登录的用户启用 "Remember Me" 服务 … 以及更多――全部集成到紧密结合的易于使用的 API 中。 Shiro 视图在所有应用程序环境下实现这些目标――从最简单的命令行应用程序到最大的企业应用,不强制依赖其他第三方框架,容器,或应用服务器。当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立即可用。

shiro 与 springMVC 集成

匿名 (未验证) 提交于 2019-12-03 00:21:02
1 配置web.xml <!-- 配置Shiro过滤器,先让Shiro过滤系统接收到的请求 --> <!-- 这里filter-name必须对应applicationContext.xml中定义的<bean id="shiroFilter"/> --> <!-- 使用[/*]匹配所有请求,保证所有的可控请求都经过Shiro的过滤 --> <!-- 通常会将此filter-mapping放置到最前面(即其他filter-mapping前面),以保证它是过滤器链中第一个起作用的 --> <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

Shiro入门教程

匿名 (未验证) 提交于 2019-12-03 00:19:01
2.2.1 shiro-first.ini 3.3.1 shiro-permission.ini 3.4.2 shiro-realm.ini shiro是apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权。 spring中有spring security ,是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 shiro不依赖于spring,shiro不仅可以实现web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro. 使用shiro实现系统的权限管理,有效提高开发效率,从而降低开发成本。 - subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。 - securityManager: 安全管理器,主体进行认证和授权都是通过securityManager进行。 - authenticator: 认证器,主体进行认证最终通过authenticator进行的。 - authorizer: 授权器,主体进行授权最终通过authenticator进行的。 - sessionManager: web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。 - sessionDao:

Shiro登录源码分析

匿名 (未验证) 提交于 2019-12-03 00:19:01
具体配置不在这里重复了,直接粘主要的ShiroFilterFactoryBean: [java] view plain copy @Bean (name= "shiroFilter" public new "/login" "/404" "authc" "/test" "anon" "/404" "anon" "/order/**" "authc" "/login" "authc" return 关于definitionMap中的value,应该经常见到authc,shiro内部中的key=authc对应的Filter就是FormAuthenticationFilter,这里只是为了讲述,因而重复定义: [java] view plain copy protected boolean throws [java] view plain copy //1.首先判断是否是login请求(既是否点击了登录这个按钮) if if if return else if return true else [java] view plain copy //如果不是的话,则跳转到登录页面,并且返回false,提示用户尚未登录(accessDenied) if "]" return false 1-2 这个结果会一层一层往上传,shiro有一堆filter链 到了登录页面之后,注意这里的action要为

Shiro内置过滤器

匿名 (未验证) 提交于 2019-12-03 00:19:01
运行 Web 应用时,Shiro会创建一些有用的默认 Filter 实例,并自动地在 [main] 项中将它们置为可用 这些可用的默认的 Filter 实例是被 DefaultFilter 枚举类定义的(枚举的名称字段就是可供配置的名称) ssl :org.apache.shiro.web.filter.authz.SslFilter user :org.apache.shiro.web.filter.authz.UserFilter anon :org.apache.shiro.web.filter.authc.AnonymousFilter port :org.apache.shiro.web.filter.authz.PortFilter rest :org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter authc :org.apache.shiro.web.filter.authc.FormAuthenticationFilter perms :org.apache.shiro.web.filter.authz.PermissionAuthorizationFilter roles :org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

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

Shiro内置过滤器

匿名 (未验证) 提交于 2019-12-03 00:15:02
DefaultFilter 枚举类定义了shiro所有的默认过滤器。 package org.apache.shiro.web.filter.mgt; public enum DefaultFilter { anon(AnonymousFilter.class), authc(FormAuthenticationFilter.class), authcBasic(BasicHttpAuthenticationFilter.class), logout(LogoutFilter.class), noSessionCreation(NoSessionCreationFilter.class), perms(PermissionsAuthorizationFilter.class), port(PortFilter.class), rest(HttpMethodPermissionFilter.class), roles(RolesAuthorizationFilter.class), ssl(SslFilter.class), user(UserFilter.class); private final Class<? extends Filter> filterClass; private DefaultFilter(Class<? extends Filter>

Shiro的实现流程

匿名 (未验证) 提交于 2019-12-03 00:11:01
获取当前的 Subject. 调用 SecurityUtils.getSubject(); 测试当前的用户是否已经被认证. 即是否已经登录. 调用 Subject 的 isAuthenticated() 若没有被认证, 则把用户名和密码封装为 UsernamePasswordToken 对象 1). 创建一个表单页面 2). 把请求提交到 SpringMVC 的 Handler 3). 获取用户名和密码. 执行登录: 调用 Subject 的 login(AuthenticationToken) 方法. 自定义 Realm 的方法, 从数据库中获取对应的记录, 返回给 Shiro. 1). 实际上需要继承 org.apache.shiro.realm.AuthenticatingRealm 类 2). 实现 doGetAuthenticationInfo(AuthenticationToken) 方法. 2). 实现 doGetAuthenticationInfo(AuthenticationToken) 方法. 由 shiro 完成对密码的比对. 1).密码的比对: 通过 AuthenticatingRealm 的 credentialsMatcher 属性来进行的密码的比对! 2). 如何把一个字符串加密为 MD5 替换当前 Realm 的 credentialsMatcher

shrio学习笔记

匿名 (未验证) 提交于 2019-12-03 00:11:01
Thymeleaf扩展坐标 <!--thyemleaf对shrio的扩展坐标--> <dependency> <groupId> com.github.theborakompanioni </groupId> <artifactId> thymeleaf-extras-shiro </artifactId> <version> 2.0.0 </version> </dependency> 配置ShiroDialect 在ShiroConfig类里面添加getShiroDialect方法 /** *配置ShiroDialect,用于thymeleaf和shiro 标签配合使用 */ @Bean Public ShiroDialect getShiroDialect (){ return new ShiroDialect (); } test.html文件 <!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <title> Title </title> </head> <body> <div shiro:hasPermission = "user:add" > <a href = "add" > 添加 </a> </div> <div shiro:hasPermission = "user