在pac4j探索的上一篇文章大致讲述了一下buji-pac4j+CAS的认证流程。这里记录一下本人实现的最简单的单点登录,仅作为笔记、学习交流之用,戳这里获取本文源码。
一、项目框架
1、 buji-pac4j(v.3.0.0)
2、shiro (v.1.4.0)
3、springmvc (v.4.3.2)
4、CAS (v.4.2.6)
5、pac4j-cas(v.2.2.1)
在maven项目的pom.xml里配置以上相关依赖,具体依赖配置可以查看我的项目,这里不再赘述。
二、目录结构
客户端项目(pac4jtest1)目录结构如下:
1、java文件目录中,Redirect2CasLoginFilter是测试用的,可以不管,MyCasClient类是继承自CasClient的自定义客户端,ShiroCasLogoutHandler类是单点登出时对shiro的一些操作,Controller类是请求控制器,util包里的是单点登出相关的类;
2、配置文件目录中,log4j.properties是日志管理文件,url.properties配置了项目中用到的各种url,spring-comm.xml配置了shiro集成pac4j的配置,spring-mvc.xml是springmvc的相关配置;
3、另外还有个index.jsp,就是受保护的页面,请求访问前需要先认证。
二、springMvc配置
这里springmvc作最简单的配置:
<!-- 自动扫描的包名 -->
<context:component-scan base-package="com.pac4j.rest"/>
<!-- 默认的注解映射的支持,自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
<mvc:annotation-driven />
<!-- 视图解释类 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
<!-- 对静态资源文件的访问-->
<mvc:resources mapping="/images/**" location="/WEB-INF/images/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
三、pac4j配置
spring-comm.xml是shiro整合pac4j的配置,具体配置如下:
<!-- 地址配置 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/url.properties</value>
</list>
</property>
</bean>
<!-- pac4j configurations -->
<!-- 请求cas服务端配置 -->
<bean id="casConfig" class="org.pac4j.cas.config.CasConfiguration">
<!-- CAS server登录链接 -->
<property name="loginUrl" value="${sso.cas.server.loginUrl}"></property>
<!-- CAS server服务前缀 -->
<property name="prefixUrl" value="${sso.cas.server.prefixUrl}"></property>
<!-- 登出处理器,单点登出时所需要的操作在这里实现-->
<property name="logoutHandler" ref="casLogoutHandler"></property>
</bean>
<!-- cas客户端配置 -->
<bean id="casClient" class="com.pac4j.client.MyCasClient">
<constructor-arg ref="casConfig" />
<property name="includeClientNameInCallbackUrl" value="false"></property>
<!-- 客户端回调地址 -->
<property name="callbackUrl" value="${sso.cas.client.callbackUrl}"></property>
</bean>
<!-- shiro登出处理器,销毁session及登录状态等-->
<bean id="casLogoutHandler" class="com.pac4j.handler.ShiroCasLogoutHandler">
<property name="destroySession" value="true"></property>
</bean>
<bean id="sessionStore" class="com.pac4j.util.MyShiroSessionStore"></bean>
<!-- pac4j配置 -->
<bean id="authcConfig" class="org.pac4j.core.config.Config">
<constructor-arg ref="casClient"></constructor-arg>
<property name=&