本示例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. yii2项目中运行composer 过程中遇到的问题

    问题1: Your requirements could not be resolved to an installable set of packages 则表明 未安装fxp/composer-a ...

  2. php简单使用shmop函数创建共享内存减少服务器负载

    在之前的一篇博客[了解一下共享内存的概念及优缺点]已经对共享内存的概念做了说明.下面就来简单使用共享内存(其实也可以用其他工具,比如redis) PHP做内存共享有两套接口.一个是shm,它实际上是变 ...

  3. 实现 AD 采样,使用 LCD1602 显示 AD 数值

    实现 AD 采样,使用 LCD1602 显示 AD 数值 写在前面 单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟 ...

  4. Linux下的查找技巧

    Find知识点: -mtime ——修改时间 -ctime ——创建时间 -atime ——访问时间 mtime 举例说明: -mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容 ...

  5. Linux-eval

    shell中eval的用法示例: 语 法:eval [参数] 功能说明:eval会对后面的[参数]进行两遍扫描,如果在第一遍扫面后cmdLine是一个普通命令,则执行此命令:如果cmdLine中含有变 ...

  6. ldap集成jenkins

    jenkins版本:2.5.3,ldap插件:1.15 jenkins ldap支持需要安装ldap plugin,强烈建议插件安装版本为1.15及以上(支持ldap 配置测试) 安装插件: 系统管理 ...

  7. 使用Navicat for MySQL添加外键约束

    转载:http://blog.csdn.net/u013215018/article/details/54981216 现在有两个表一张是Roles表(角色表),一张是RoleUser表(用户角色) ...

  8. Delphi程序的主题(Theme)设置

    本文参考了 http://superlevin.ifengyuan.tw/delphi-change-vcl-style/ 在项目的工程文件中勾选主题,设置缺省主题为Windows 部分代码如下: u ...

  9. Restful framework【第五篇】解析器

    基本使用 -解析器 -源码从request.data -全局配置 -'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'], -局 ...

  10. 【系列教程1】Gradle入门系列三:依赖管理

    在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极具挑战的.这也是为什么依赖管理对于每个软件项目都是至关重要的一部分. 这篇教程主要讲述如何使用Gradle管理我们项目的依赖,我们 ...