IUAP--单点登录
Posted 吼怠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IUAP--单点登录相关的知识,希望对你有一定的参考价值。
登录组件:
- 提供统一的登录组件
- 身份、证明验证身份
- 支持多种身份标识,用户名、邮箱、手机号
- 支持多个域,从与得到用户响应的角色,权限进行验证用户时候能进行操作。
- 支持会话管理和安全管理
- 支持多种验证策略,并支持扩展
- 提供了用户、角色、功能、数据权限、用户角色关联、角色权限关联模型及维护api
- 提供认证、授权、加密、会话管理与web集成、缓存等功能
- 权限结构基于RBAC模型,用户关联角色,角色关联功能。
- 功能根据自定义策略可自行扩展
- 提供拦截器即只对权限进行控制
- 提供缓存机制,降低读消耗
工作流程中:
-
应用程序构建一个用户认证信息的
AuthenticationToken
实例之后,调用Subject.login(token)
进行登录,其会自动委托给Security Manager。其中 ,AuthenticationToken
中包含了终端用户的Principals
和Credentials
。 -
Subject
实例通常是DelegatingSubject
类(或者子类)的实例对象,在认证时,会委托应用程序设置的securityManager
实例调用securityManager.login(token)
。SecurityManage
r负责真正的身份验证逻辑,它会委托给Authenticator
进行身份验证。 -
SecurityManager
接收到token
信息后委托给Authenticator
的实例(通常是ModularRealmAuthentication
类的实例,Authenticator
才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现),调用authenticator. authenticate(token)
。ModularRealmAuthentication
在认证中会对设置的一个或者多个Realm
实例进行适配,实际上为Shiro提供了一个可插拔的认证机制。 -
Authenticator
可能会委托给相应的Authentication Strategy
进行多Realm
身份验证,默认ModularRealmAuthenticator
会调用AuthenticationStrategy
进行多Realm
身份验证。在Realm
被调用后,Authentication
将对每一个Realm
的结果作出相应。 -
Authenticator
会把相应的token
传入Realm
,Realm
将调用getAuthenticationInfo(token)
(此方法就是实际认证处理,我们需要覆盖Realm
的doGetAuthenticationInfo
方法来编写自己的认证处理),从Realm
获取身份验证信息,如果返回false
或者抛出异常,则表示身份验证失败了。
xxxxxxxxxx
FilterChain getChain(ServletRequest request, ServletResponse response, FilterChain originalChain);
名称 | 拦截器 | 说明 |
身份验证相关的 | ||
authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter | 基于表单的拦截器;如"/** = statelessAuthc",如果没有登录会跳到相应的登录页面登录;主要属性:usernameParam:表单提交的用户名参数名( username); passwordParam:表单提交的密码参数名(password); rememberMeParam:表单提交的密码参数名(rememberMe); loginUrl:登录页面地址(/login.jsp);successUrl:登录成功后的默认重定向地址; failureKeyAttribute:登录失败后错误信息存储key(shiroLoginFailure); |
authc | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter | Basic HTTP 身份验证拦截器,主要属性,applicationName:弹出登陆框显示的信息(application) |
logout | org.apache.shiro.web.filter.authc.LogoutFilter | 退出拦截器,主要属性:redirectUrl:退出成功后重定向的地址(/) "/logout = logout" |
user | org.apache.shiro.web.filter.authc.UserFilter | 用户拦截,用户已经身份验证、记住我登录的都可,实例“/** = user ” |
anno | org.apache.shiro.web.filter.authc.AnonymousFilter | 匿名拦截器,既不需要登录即可访问,一般用于静态资源过滤 /static/** = anon /css/** = anon
/images/** = anon /trd/** = anon
/js/** = anon /api/** = anon
/cxf/** = anon /jaxrs/** = anon
|
授权相关的 | ||
roles | org.apache.shiro.web.filter.authz .RolesAuthorizationFilter |
角色授权拦截器,验证用户是否拥有所有角色;主要属性: loginUrl:登录页面地址(/login.jsp);unauthorizedUrl:未授权后重定向的地址;示例“/admin/**=roles[admin]” |
perms | org.apache.shiro.web.filter.authz .PermissionsAuthorizationFilter |
权限授权拦截器,验证用户是否拥有所有权限;属性和roles一样;示例“/user/**=perms["user:create"]” |
port | org.apache.shiro.web.filter.authz .PortFilter |
端口拦截器,主要属性:port(80):可以通过的端口;示例“/test= port[80]”,如果用户访问该页面是非80,将自动将请求端口改为80并重定向到该80端口,其他路径/参数等都一样 |
rest | org.apache.shiro.web.filter.authz .HttpMethodPermissionFilter |
rest风格拦截器,自动根据请求方法构建权限字符串(GET=read, POST=create,PUT=update,DELETE=delete,HEAD=read,TRACE=read,OPTIONS=read, MKCOL=create)构建权限字符串;示例“/users=rest[user]”,会自动拼出“user:read,user:create,user:update,user:delete”权限字符串进行权限匹配(所有都得匹配,isPermittedAll); |
ssl | org.apache.shiro.web.filter.authz .SslFilter |
SSL拦截器,只有请求协议是https才能通过;否则自动跳转会https端口(443);其他和port拦截器一样; |
其他 | ||
noSessionCreation | org.apache.shiro.web.filter.session .NoSessionCreationFilter |
不创建会话拦截器,调用 subject.getSession(false)不会有什么问题,但是如果 subject.getSession(true)将抛出 DisabledSessionException异常; |
以上是关于IUAP--单点登录的主要内容,如果未能解决你的问题,请参考以下文章
最准确的单点登录SSO图示和讲解(有代码范例)|手把手教做单点登录(SSO)系列之二