本示例jfinal集成cas单点认证,采用获取到登录用户session信息后,在本地站点备份一份session信息,主要做以下几个步骤:

1、站点引入响应jar包;

2、在web.xml中配置对应过滤器;

3、增加拦截handler,并在jfinal的config中配置。

4、注销操作

此次示例在handler中获取登录用户session,并设置本站点session。

详细介绍如下:

1、引入jar包

需要引入两个jar包:cas-client-core-3.2.2.jar和commons-logging-1.2.jar;

将两个jar包放入站点WEB-INFO/lib下即可;

2、在web.xml中配置对应过滤器

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<context-param>
<param-name>getAuthMenuUrl</param-name>
<param-value>http://192.168.2.175:8082/hebswj_yw/api/modulePermis/</param-value>
</context-param>
<context-param>
<param-name>homePageUrl</param-name>
<param-value>http://192.168.2.175:8082/hebswj/index.jsp</param-value>
</context-param> <!-- ========================集成CAS单点登录模块 开始=========================== -->
<!-- 1.CAS单点登出 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 2.CAS单点登录 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>http://192.168.2.175:8082/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 3.CAS票据验证 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://192.168.2.175:8082/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--4. CAS HttpServletRequest Wrapper Filter 这个是HttpServletRequet的包裹类,让他支持getUserPrincipal,getRemoteUser方法来取得用户信息-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--5. CAS Assertion Thread Local Filter 这个类把Assertion信息放在ThreadLocal变量中,这样应用程序不在web层也能够获取到当前登录信息-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ========================集成CAS单点登录模块 结束=========================== --> <filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.config.Config</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>web/index.jsp</welcome-file>
</welcome-file-list>
</web-app>

web.xml配置

注:cas的过滤器需要配置在jfinal过滤器前面,否则在handler中获取不到传入的登录用户session信息;

web.xml中配置的serverName当前地址必须为ip地址,不可为127.0.0.1,具体原因还不清楚,待后续研究。

3、增加拦截handler,并在jfinal中配置

 package com.handler;

 import java.io.Console;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jasig.cas.client.authentication.AttributePrincipal;
import com.jfinal.handler.Handler;
import com.model.User; /**
* 用于cas验证辅助使用,并存储用户信息到session
* @author sunflower
*
*/
public class CasHelpHandler extends Handler{ @Override
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, boolean[] isHandled) { int index = target.lastIndexOf(";jsessionid"); if(index>-1){
target = index==-1?target:target.substring(0, index);
} AttributePrincipal principal1 = (AttributePrincipal) request.getUserPrincipal();
Map<String, Object> userMap = principal1.getAttributes(); if(userMap!=null){
User user=new User();
user.setUserId(userMap.get("UserId").toString());
user.setUserName(userMap.get("RealName").toString());
user.setDeptId(userMap.get("DeptId").toString());
user.setRoleId(userMap.get("RoleId").toString());
request.getSession().setAttribute("user",user);
} nextHandler.handle(target, request, response, isHandled);
} }

handler

 package com.config;

 import com.util.*;
import com.handler.CasHelpHandler;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.ext.handler.UrlSkipHandler;
import com.jfinal.ext.route.AutoBindRoutes;
import com.jfinal.kit.PropKit;
import com.util.ConfigDBPluginHelper; /**
* API引导式配�?
*/
public class Config extends JFinalConfig { /**
* 配置常量
*/
public void configConstant(Constants me) {
// 加载少量必要配置,随后可用PropKit.get(...)获取�?
PropKit.use("config.txt");
me.setDevMode(PropKit.getBoolean("devMode", false));
} /**
* 配置路由
*/
public void configRoute(Routes me) {
me.add(new AutoBindRoutes()); // 根据xml文件配置,自动配置路由
ConfigRoutesHelper.configRouteInXml(getClass().getResource("/")+"deploy.xml", me);
} /**
* 配置插件
*/
public void configPlugin(Plugins me) {
ConfigDBPluginHelper.configSqlServerPlugin(me);
} /**
* 配置全局拦截�?
*/
public void configInterceptor(Interceptors me) { } /**
* 配置处理�?
*/
public void configHandler(Handlers me) {
// 增加例外
me.add(new CasHelpHandler());
me.add(new UrlSkipHandler("/web/",true));
me.add(new UrlSkipHandler("/$",true));
}
}

config中配置handler

如果找不到jfinal的配置文件,在web.xml中查看jfinal对应的configclass即可找到

 <filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.config.Config</param-value>
</init-param>
</filter>

jfinal配置中configClass配置格式

4、注销操作

在调用cas服务注销登录用户的时候,不能使用ajax的方式请求,故可以使用iframe来辅助注销登录。

在页面增加一个隐形的iframe,注销的时候,将iframe的url设置为cas服务注销登录的服务,然后再iframe加载完成后,重新设置当前页面的location.href,即可达到注销的目的。

 <iframe onReadystatechange ={this.directToLogin} onLoad={this.directToLogin} style={{position:"absolute",left:"-110px",width:"100px"}} ref="iframe"/>

iframe设置

 loginOut:function(){
var _url=CONFIGS["logOutUrl"];
this.refs["iframe"].src=_url;
},
directToLogin:function(){
location.href=CTX;
},

调用方法

配置完成后,即对接成功~

jfinal集成cas单点认证实践的更多相关文章

  1. CAS学习笔记五:SpringBoot自动/手动配置方式集成CAS单点登出

    本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式实现CAS客户端登出及单点登出. 本文基于<CAS学习笔记三:SpringBoot自动/手动配置方式集成C ...

  2. Spring boot security权限管理集成cas单点登录

    挣扎了两周,Spring security的cas终于搞出来了,废话不多说,开篇! Spring boot集成Spring security本篇是使用spring security集成cas,因此,先 ...

  3. CAS单点登录实践(spring cas client配置)

    前言: 最近的项目需要将多个站点统一登录,查阅了资料Jasig cas(Central Authentication Service)(官方站点:http://www.jasig.org/cas)使用 ...

  4. SpringBoot集成CAS单点登录,SSO单点登录,CAS单点登录(视频资料分享篇)

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 很早期的公司 ...

  5. SpringBoot项目集成cas单点登录

    添加依赖 添加cas client依赖 <dependency> <groupId>net.unicon.cas</groupId> <artifactId& ...

  6. CAS学习笔记三:SpringBoot自动配置与手动配置过滤器方式集成CAS客户端

    本文目标 基于SpringBoot + Maven 分别使用自动配置与手动配置过滤器方式集成CAS客户端. 需要提前搭建 CAS 服务端,参考 https://www.cnblogs.com/hell ...

  7. cas+tomcat+shiro实现单点登录-4-Apache Shiro 集成Cas作为cas client端实现

    目录 1.tomcat添加https安全协议 2.下载cas server端部署到tomcat上 3.CAS服务器深入配置(连接MYSQL) 4.Apache Shiro 集成Cas作为cas cli ...

  8. spring security集成cas实现单点登录

    spring security集成cas 0.配置本地ssl连接 操作记录如下: =====================1.创建证书文件thekeystore ,并导出为thekeystore.c ...

  9. CAS单点登录(SSO)服务端的部署和配置---连接MySQL进行身份认证

    一.修改系统host,加入 127.0.0.1 server.test.com127.0.0.1 client1.test.com127.0.0.1 client2.test.com 二.安装grad ...

随机推荐

  1. VMware环境安装MacOS

    环境: win10专业版 VMware 14 Pro 开始吧 1. 停止服务 2. 解压并管理员权限运行unlocker,目的是使得 win10 环境下的 VMWare14Pro 支持 mac 系统的 ...

  2. Spring Boot 2 (八):Spring Boot 集成 Memcached

    Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...

  3. NATS—基础介绍

    1. 介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的一个开 ...

  4. k8s debug

    https://feisky.gitbooks.io/kubernetes/components/api-aggregation.html API convention Kubernetes deep ...

  5. opencv学习之路(12)、图像滤波

    一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...

  6. PHP 将大量数据导出到 Excel 的方法

    原文链接:https://blog.csdn.net/bkcnl/article/details/76152505 public function getxiajiueser(){ $id = req ...

  7. (转)ElasticSearch学习

    (二期)21.全文搜索引擎Elasticsearch [课程21]elasticsearch.xmind82.1KB [课程21]lucene.xmind0.8MB [课程21]基本用法....api ...

  8. .NET Standard vs. .NET Core

    What is the difference between .NET Core and .NET Standard Class Library project types? Answer1 When ...

  9. Module controller in JMeter

    https://qualibrate.com/blog/quality-assurance/jmeter-module-controller/ 通过组合Test Fragments 和Module C ...

  10. Python入门 值内存管理与所有的关键字

    值内存管理 Python采用的是基于值得内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址. id(x) : 用于返回变量所指值的内存地址 x = 3 pri ...