Spring Security 和 Shiro
所属分类 shiro
浏览量 99
安全管理框架 可以完成认证和授权的功能
认证(Authentication)
验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户
授权(Authorization)
经过认证后判断当前用户是否有权限进行某个操作
Spring Security
spring-security对spring整合较好,使用起来更加方便;
有更强大的spring社区进行支持;
支持第三方的 oauth 授权
Spring Security一般流程
1. 用户登录时,前端将用户输入的用户名、密码信息传输到后台,后台用一个类对象将其封装起来,通常是 UsernamePasswordAuthenticationToken 这个类
2. 用户密码验证
调用Service根据username从数据库中取用户信息到实体类的实例中,比较两者的密码,
如果密码正确就成功登陆,同时把包含着用户的用户名、密码、所具有的权限等信息的类对象放到SecurityContextHolder(安全上下文容器,类似Session)
3. 用户访问一个资源的时候,首先判断是否是受限资源。如果是的话判断当前是否登录,没有的话就跳到登录页面。
4. 如果用户已经登录,访问一个受限资源的时候,程序要根据url去数据库中取出该资源所对应的所有可以访问的角色,然后拿着当前用户的所有角色一一对比,判断用户是否可以访问
shiro
简单 灵活 可脱离spring使用
1. 易于理解的 Java Security API;
2. 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
3. 对角色的简单的签权(访问控制),支持细粒度的签权;
4. 支持一级缓存,以提升应用程序的性能;
5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
6. 异构客户端会话访问;
7. 非常简单的加密 API;
8. 不跟任何的框架或者容器捆绑,可以独立运行。
四大核心功能:Authentication,Authorization,Cryptography,Session Management
1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
2. Authorization:
授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,
常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
3. Session Manager:
会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
4. Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Shiro三个核心组件:Subject, SecurityManager 和 Realms.
1. Subject:主体,任何可以与应用交互的用户;
2. SecurityManager:
相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;
所有具体的交互都通过 SecurityManager 进行控制;
它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。
3. Realm:域,Shiro从Realm获取安全数据(如用户、角色、权限),
SecurityManager要验证用户身份,需要从Realm获取相应的用户进行比较以确定用户身份是否合法;
也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;
可以把Realm看成DataSource,即安全数据源
授权第三方登录需要手动实现
Spring Security的权限细粒度更高
https://gitee.com/dyyx/Shiro.git
https://gitee.com/dyyx/spring-security
上一篇
下一篇
基于 CAS 的 OSS 流程说明
每日一曲合集
握笔姿势的重要性
hutool IdUtil
hutool 加密解密工具 SecureUtil
Java开源加密库 Bouncy Castle BC库