shrio cas 集成,多登录页面的配置,session过期校验的定制:
A:客户端配置有关请求和返回的
1,登陆,登出,登录失败的拦截:
这个直接把shrio的普通的页面配置路劲,改成cas的服务器的登录,登出地址(验证有关),并且带的参数地址是相应完成功能
之后调用的本服务的地址:
<bean id="logoutFilter" class="org.apache.shiro.web.filter.authc.LogoutFilter">
<property name="redirectUrl"
value="http://10.0.1.222:8080/cas/logout?service=http://localhost:8080/web/siteindex.do" /><!-用这个回调地址跳转->
</bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl"
value="http://10.0.1.222:8080/cas/login?service=http://localhost:8080/web/cas" /><!-cas服务端地址,cas客户端地址 用这个回调地址在服务端写session->
<!-- <property name="successUrl"
value="http://10.0.1.222:8080/web/1.jsp" /> -->
<property name="successUrl"
value="http://localhost:8080/web/siteindex.do" />
<property name="filters">
<map>
<!-- <entry key="authc" value-ref="formAuthenticationFilter" /> -->
<entry key="cas" value-ref="casFilter" />
<entry key="logout" value-ref="logoutFilter" />
</map>
</property>
<!-- 重要:必须加上/cas = cas来告诉/cas用casFilter来处理 -->
<!-- 重要:logout为登出filter -->
<property name="filterChainDefinitions">
<value>
/resources/**=anon(这种打*的用语变量现在路径上或放行到子目录)(@RequestMapping(value = "/chat/offer/list/{conobjKey}")
public String chatWithConobjKey(@RequestParam(value="tradeCustomerKey", required=false) String tradeCustomerKey,HttpSession session, HttpServletRequest request,HttpServletResponse response, Model model, @PathVariable String conobjKey
) throws EsteelException, UnsupportedEncodingException )
/reg/**=anon
/etc/**=anon
/js/**=anon
/plugins/**=anon
/cas = cas
/logout = logout
/** = user
</value>
</property>
</bean>
2,项目请求的拦截
在CasRealm中配置一个为每一个请求接收ticket的拦截的请求,并且验证放行,这里配置的是
哪里的过滤器那么之后所有的请求的项目地址就是那个
<bean id="casRealm" class="org.apache.shiro.cas.CasRealm">
<property name="defaultRoles" value="ROLE_USER" />
<!-- 重要:这个是用来获取ticket的casServerURL的前缀,所以不能有login -->
<property name="casServerUrlPrefix" value="http://10.0.1.222:8080/cas/" />//////cas服务不要login
<!--客户端的回调地址设置,必须和上面的shiro-cas过滤器拦截的地址一致 -->
<!-- <property name="casService" value="http://localhost:8080/web/cas" /> -->
<property name="casService" value="http://localhost:8080/web/cas" />///////////自己集成的过滤器
</bean>
<!-- 用来接受ticket的filter -->
<bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
<!-- <property name="failureUrl"
value="http://localhost:8080/web/resources/failure.html" /> -->
<property name="failureUrl"
value="http://10.0.1.222:8080/esteelHome/index" />
<!-- <property name="successUrl"
value="http://10.0.1.222:8080/esteelHome/index" /> -->
</bean>
B:cas服务端
将https改为http否则session写不进去
<bean id="proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:requireSecure="false"
p:httpClient-ref="httpClient" />
一般服务端只需要配置验证方式,及加密方式
http://wenku.baidu.com/link?url=lE3_0nBGsLtAQtHp9Bo_rD8ScUSMGjSaKwBW5BxfLhU4GU55sXN15UegxaFs1i6V7lULhoEL9DHC-kasUx1zPlPic26FR7SwPMjfMcnKPgi
可以设置同一个浏览器关闭打开都可
同时有关验证方式,机密算法等都在服务端配置
C:配置解析
登入配置要带内部的票拦截器,登出不必只要带本地服务的登出地址,权限中的请求也要带票据拦截器(cas不必带login)
cas服务地址后面的就是cas服务执行完了之后回调客户端的地址比如回调的登出页面,本系统的ticket过滤器。
D:多个登录页面实现的方案:
登录登出配置时需要传参的&转义,这种传参数可以在这个默认页面的基础上根据参数值显示不同的登录页面
客户端配置:
<property name="loginUrl" value="http://localhost:8080/cas/login?a=222&service=http://localhost:8080/web/cas" />
配置多个登录的拦截器(实际上一个拦截器,不同的名字)(符合这些拦截器的特征的就走这几个拦截跳出不同的登录页,不符合的就用默认的拦截器的配置的地址参数,
用,默认的登录页)
换句话说:不同loginurl请求用不同的过滤器即可,在shrio中加过滤器,类似用过滤规则获取用户信息,但是又不要登录,
不同的过滤规则对应不同的路劲
参考:
http://bbs.csdn.net/topics/390578669
shiro中多用户的登陆页面(multiple login pages)配置
http://blog.csdn.net/win7system/article/details/50827250
本项目的多登陆页面的配置示例:
<!--左上角登录请求 -->
<bean id="osLogin"
class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
<property name="loginUrl" value="http://localhost:8080/cas/login?a=0&service=http://localhost:8081/web/cas" />
<property name="successUrl" value="http://localhost:8081/web/siteindex.do" />
</bean>
<!--中间会员中心登录请求 -->
<bean id="oiLogin"
class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
<property name="loginUrl" value="http://localhost:8080/cas/login?a=3&service=http://localhost:8081/web/cas" />
<property name="successUrl" value="http://localhost:8081/web/siteindex.do" />
</bean>
<!-- 会员中心登录请求 -->
<bean id="csLogin"
class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
<property name="loginUrl" value="http://localhost:8080/cas/login?a=2&service=http://localhost:8081/web/cas" />
<property name="successUrl" value="http://localhost:8081/web/siteindex.do" />
</bean>
//默认的登录拦截根据需要写一个参数(决定调用哪个页面)
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- <property name="loginUrl"
value="http://10.0.1.222:8080/cas/login?service=http://localhost:8081/web/cas" /> -->
<property name="loginUrl"
value="http://localhost:8080/cas/login?a=2&service=http://localhost:8081/web/cas" >
</property>
<property name="successUrl"
value="http://localhost:8081/web/siteindex.do" />
<property name="filters">
<map>
<!-- <entry key="authc" value-ref="formAuthenticationFilter" /> -->
<entry key="cas" value-ref="casFilter" />
<entry key="logout" value-ref="logoutFilter" />
<entry key="osLogin" value-ref="osLogin" />
<entry key="oiLogin" value-ref="oiLogin" />
<entry key="csLogin" value-ref="csLogin" />
</map>
</property>
<!-- 重要:必须加上/cas = cas来告诉/cas用casFilter来处理 -->
<!-- 重要:logout为登出filter /myaccount/getFirmCenter =csLogin-->
<property name="filterChainDefinitions">
<value>
/wareTpl/showWares.do=anon
/siteindex.do/**=anon
/showPurpose=anon
/information/info/toOreShipments=anon
/jiaoyiguize=anon
/bid/issue/toInvitationUI=anon
/bid/issue/toBidNoticeUI=anon
/biden!noticeIndexUI.do=anon
/buding.jsp=anon
/hqConObj/cjjl.do=anon
/myaccount/getPowerCount=anon
/tbPowerGroup/createTopMenuTree=anon
/reg/registerUI= anon
/register/**=anon
/resources/**=anon
/reg/**=anon
/etc/**=anon
/js/**=anon
/plugins/**=anon
/cas = cas
/logout = logout
/osLogin = osLogin
/oiLogin = oiLogin
/csLogin = csLogin
/osLogin/login = user
/oiLogin/login = user
/csLogin/login = user
/** = user
</value>
</property>
</bean>
服务端获取:
cas传的值页面可以直接getParameter();(CAS服务的默认登录页面,view/jsp/default/ui/casLoginView.jsp)
<%
String path = request.getContextPath();
request.setAttribute("path", path);
String sform=(String)request.getParameter("a");
out.print("=========="+sform);
%>
<% out.print("=========="+sform);%>
如果jsp有错,刷新时有时会出现有时不会出现,并且> token引用错误
E:session的校验订制化
jseesionId 就是cookie就是TGT的id
如果用定制化的cookie即就是有特定名称的cookie,不叫jsessionId其他一样只要配置即可esteelHome中,
<property name="domain" value="10.0.1.222" />这个不写则罢默认取A/N(但是验证和域名无关)
(不像单纯用cookie要用一级域名相同才可),如果写的话就同样写一级域名,这是几个单点的系统都需要一级域名相同
才可单点登录否则获取不到之前其他点登录的cookie所以就不能完成单点登录,回写用户信息(baidu.com 一级域名 www.baidu.com 二级域名 m.v.baidu.com三级域名
后缀(.com)前面有n个点这个域名就是(n+1)级域名
com.cn这种后缀要连起来看做一个后缀整体。)
注:cas的单点登录和域名无关,所以domain属性可以注释掉
之所以定制sessionId即cookie,是为了实现定时检验cookie的有效性,无效时重行登录,这个一般集成在权限管理器中
<!-- 28行引用的,安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="casRealm" />
<property name="subjectFactory" ref="casSubjectFactory" />
<property name="rememberMeManager" ref="rememberMeManager" />
<property name="sessionManager" ref="sessionManager" />
<!-- <property name="sessionMode" value="native" /> -->
<!-- <property name="cacheManager" ref="cacheManager" /> -->
</bean>
<!-- f6行引用的,session管理器 -->
<bean id="sessionManager"
class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="globalSessionTimeout" value="1800000" />
<property name="deleteInvalidSessions" value="true" />
<property name="sessionValidationSchedulerEnabled" value="true" />
<property name="sessionValidationScheduler" ref="sessionValidationScheduler" />
<property name="sessionDAO" ref="sessionDAO" />
<property name="sessionIdCookieEnabled" value="true" />
<property name="sessionIdCookie" ref="sessionIdCookie" />
</bean>
<!-- 73行引用的, 会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话 -->
<bean id="sessionValidationScheduler"
class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
<property name="interval" value="1800000" />
<property name="sessionManager" ref="sessionManager" />
</bean>
<!-- 81行引用的, sessionIdCookie -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!-- 默认name=JSESSIONID -->
<constructor-arg value="FFF6COOKIE" />
<property name="path" value="/" />
<property name="maxAge" value="3600" />
<property name="httpOnly" value="true" />
<!-- 注释掉domain为A/N -->
<property name="domain" value="10.0.1.222" />//写成和其他单点系统相同的域名,如果其他是localhost,这个也要换成localhost
</bean>
session的设置及前端获取类似普通的值桟:
CusUserBean cusUserBean = CASUtil.getCusUserBean();
session.setAttribute(Constants.SESSION_FIRM,cusUserBean);
${SESSION_FIRM.WEB_USERID}
相关推荐
在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次认证即可访问其他多个相互信任的系统。本项目是关于如何将CAS(Central Authentication Service)与...
### 单点登录CAS与权限管理框架Shiro集成 #### 一、概述 单点登录(Single Sign-On,简称SSO)是一种常见的身份验证技术,它允许用户通过一次登录即可访问多个应用程序和服务。这种机制提高了用户体验,同时也简化...
例如,当用户访问受保护的资源时,如果未通过 CAS 认证,Shiro 将重定向到 CAS 登录页面。认证成功后,CAS 会将用户重定向回原请求的 URL。 6. **处理 CAS 票据验证异常** - 在 Shiro 中,可能会遇到 CAS 票据验证...
7. 整合测试:集成完成后,进行详细的测试是非常必要的,包括正常登录、登出、权限验证、会话管理等多个方面,以确保系统的稳定性和安全性。 以上就是CAS与Shiro集成的核心知识点。这个集成方案可以为大型分布式...
springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是maven项目,但是WEB-INF里面的lib目录下面...
spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...
这篇文章将详细讲解如何将CAS(Central Authentication Service)、Shiro(Apache Shiro)和Ehcache集成到Spring应用程序中,提供一个完整的实现流程。这个集成方案主要用于实现统一的身份验证和授权,提升系统的...
总的来说,实现"shiro管理多登录入口配置,手机端登录与网页端登录"需要对 Shiro 的 Realm、过滤器和配置有深入理解,以及根据应用场景定制相应的登录验证流程。正确配置后,Shiro 可以有效地管理和保护不同入口的...
"spring boot 1.5.4 集成shiro+cas实现单点登录和权限控制" Spring Boot 1.5.4 集成 Shiro+Cas 实现单点登录和权限控制是指在 Spring Boot 应用程序中使用 Shiro 框架和 Cas 服务器来实现单点登录和权限控制的功能...
2. Shiro使用Pac4j引导用户跳转到CAS服务器的登录页面。 3. 用户在CAS服务器上输入凭证并登录成功,CAS生成TGT并返回一个ST。 4. 用户携带ST返回到SpringBoot应用,Shiro通过Pac4j解析ST并与CAS服务器通信验证。 5. ...
在 Shiro 应用的 web.xml 中,配置 CAS 的客户端过滤器,以便在用户访问受保护资源时重定向到 CAS 登录页面。 通过以上步骤,Shiro 就能够与 CAS 3.5 进行集成,实现统一的身份验证。用户在访问需要认证的资源时,...
4. **Spring Shiro CAS集成**:在Spring Shiro CAS集成中,Spring作为整体应用架构的基石,Shiro处理应用内部的用户权限,而CAS则提供统一的登录验证。开发者通常会在Spring配置中引入Shiro的依赖,并配置Shiro ...
Apache Shiro 和 CAS 整合是为了解决Java应用程序中的身份验证和权限管理问题,同时实现单点登录(Single Sign-On, SSO)功能。Apache Shiro 是一个轻量级的安全框架,它提供了用户认证、授权和会话管理等功能,而...
本文将深入探讨如何利用Spring Boot、CAS 5.3、Shiro、Pac4J这四个强大的工具来构建一个高效且用户友好的REST接口,以获取CAS(Central Authentication Service)票据,避免用户被重定向到CAS服务器的登录页面。...
2. 配置SSO客户端:在项目中集成Shiro框架,配置Shiro的CasFilter,指定CAS服务器的地址和相关参数。 3. 配置HTTPS:为服务器申请并配置SSL证书,确保整个SSO过程在安全的HTTPS环境下进行。 4. 测试与调试:验证用户...
SSM项目集成Shiro搭建session共享是一个常见的需求,特别是在构建分布式系统时,为了实现用户登录状态在多个服务器间的一致性。在这个项目中,我们使用了SpringMvc4.3、Spring4.3、Mybatis3.4作为基础框架,Shiro1.4...
shiro+cas实现单点登录 示例代码,送源码分析url:http://note.youdao.com/noteshare?id=a83380ee8fc6913162042e865689844e&sub=CD905CCCE4134A159326DC2DFC1AF268
2. **集成pac4j**:在SpringBoot应用中引入pac4j,配置CAS客户端,并指定认证服务器的URL。 3. **配置Shiro**:配置Shiro Realm,利用pac4j进行认证,设置权限规则。 4. **生成JWT**:用户认证成功后,服务端生成JWT...