cas的http配置和rmi远程调用
1.cas配置http请求(服务端)
1) 解压cas-server-3.4.4-release.zip将modules目录下的cas-server-webapp-3.4.4.war改名称为cas.war复制到tomcat的webapps下,启动tomcat,访问http://localhost:8080/cas/login 就可以看到登录界面了:
2) cas默认采用https进行验证,如果使用http进行验证,需要修改服务端的配置文件
a.修改cas\WEB-INF\deployerConfigContext.xml文件
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient"/>增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false"/>
b.修改cas\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml文件
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" :cookiePath="/cas" />
c.修改服务端cas-servlet.xml配置
<bean id="logoutController" class="org.jasig.cas.web.LogoutController" ... .../>增加属性 p:followServiceRedirects="true",使单点退出后能调到制定的页面,退出链接为:http://localhost:8080/cas/logout?service=http://localhost:8080/Casclient/index.jsp
d.修改配置文件deployerConfigContext.xml,使通过数据库进行验证,密码经过md5进行加密,需要cas-server-support-jdbc-3.4.4.jar和mysql-connector-java-5.1.37.jar
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource"></property>
<property name="sql" value="select password from cas_user where username=?"></property>
<property name="passwordEncoder" ref="md5PasswordEncoder"></property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>root</value></property>
</bean>
<bean id="md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg index="0"><value>MD5</value></constructor-arg>
</bean>
3)为了让服务端返回更多的用户信息,需要进行一些配置
a.修改deployerConfigContext.xml文件
注释掉<bean id="attributeRepository"class="org.jasig.services.persondir.support.StubPersonAttributeDao">...</bean>,添加
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
<!-- 指定使用的数据源,此处dataSource是已配置好的数据源 -->
<constructor-arg index="0" ref="dataSource"/>
<!-- 从数据库中查询信息的SQL语句,通常只需要修改表名即可 -->
<constructor-arg index="1" value="select id from cas_user where {0}"/>
<property name="queryAttributeMapping">
<map>
<!-- 上述查询的参数,将userName替换为表中表示用户名的字段名称 -->
<entry key="username" value="userName"/>
</map>
</property>
<property name="resultAttributeMapping">
<map>
<!-- 需要返回给Web应用的其它信息,多个信息时可继续增加entry节点-->
<!--key值为数据表中的字段名称,value值为Client端取值时的名称标识-->
<entry key="id" value="id"/>
</map>
</property>
</bean>
同时在<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<property name="registeredServices">
<list>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
添加<!-- 客户端需要使用的对象的属性名称 -->
<property name="allowedAttributes">
<list>
<value>id</value>
<value>username</value>
</list>
</property>
服务器端可以通过:Map<String, Object> accountAttrs=ticketGrantingTicket.getAuthentication().getPrincipal().getAttributes();
int userid=Integer.parseInt(accountAttrs.get("id").toString());获取
客户端可以通过:<h1>当前用户id:<%=((AttributePrincipal)request.getUserPrincipal()).getAttributes().get("id") %></h1>获取
4)为了让给客户端提供修改服务端账户的service服务,使用rmi进行远程调用,在服务端进行如下设置:
在cas-servlet.xml中添加
<bean id="accountServiceImpl" class="org.jasig.cas.web.account.AccountServiceImpl">
<property name="centralAuthenticationService" ref="centralAuthenticationService"/>
</bean>
<bean id="accountService" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName">
<value>AccountService</value>
</property>
<property name="service">
<ref bean="accountServiceImpl"/>
</property>
<property name="serviceInterface">
<value>org.jasig.cas.web.account.IAccountService</value>
</property>
<property name="registryPort">
<value>1200</value>
</property>
</bean>
5)客户端配置
1)配置单点登录,在web.xml中添加
<!--用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CASSingle Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASSingle Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器负责用户的认证工作,必须启用它 -->
<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://localhost:8080/cas/login</param-value>
<!--这里的server是服务端的IP-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.life:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CASValidation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://localhost:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://app1.life:8081</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。-->
<filter>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--======================== 单点登录结束 ======================== -->
2)为了能在在客户端修改服务端的账户数据,需要获取到服务的账户管理service,在spring-servlet.xml中添加
<bean id="accountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl"><value>rmi://localhost:1200/AccountService</value></property>
<property name="serviceInterface"><value>org.jasig.cas.web.account.IAccountService</value></property>
</bean>
项目使用方法和下载地址:
1.下载地址:http://pan.baidu.com/s/1jG96mOm
2.使用方法:1.使用tomcat部署启动cas(cas服务器)
2.使用jetty,clean install cas_client编译并安装cas_client
3.使用jetty,分别编译并部署启动sso和sso1,来模拟不同的两个项目
4.访问http://app1.life:8081/hello.jsp和http://app2.life:8082/hello.jsp来验证单点登录
默认用户有:用户名 lisi ,密码 lisi,拥有两个项目的权限
用户名tom,密码123,拥有app2.life:8082的权限
用户名bb,密码lisi,拥有app1.life:8081的权限
cas的http配置和rmi远程调用的更多相关文章
- JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户
1 学习计划 1.定区关联客户 n 完善CRM服务中的客户查询方法 n 在BOS项目中配置代理对象远程调用crm服务 n 调整定区关联客户页面 n 实现定区关联客户 2.查看定区中包含的分区 n 页面 ...
- 在maven项目中 配置代理对象远程调用crm
1 在maven项目中配置代理对象远程调用crm 1.1 在项目的pom.xml中引入CXF的依赖 <dependency> <groupId>org.apache.cxf&l ...
- java RMI 远程调用
1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...
- WebService与RMI(远程调用方式实现系统间通信)
前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...
- hession RMI 远程调用
/** * * @author administror * 在java中,需要去extends 继承java.rmi.Remote 接口,才能称为在于服务器流的远程对象. * 各客服端调用 * */p ...
- Spring 配置RMI远程调用
项目中遇到了跨系统调用,当初想的是用webservice或者是hessian.但是这个接口用到的并不多,而且是一个非常简单的方法.所有便想到了RMI.在spring中 实现RMI非常简单. 暴露服务: ...
- Spring的RMI远程调用 - (示例)
一.定义远程服务器上接口 public interface RMIService { public String getInfo(); } 二.实现远程服务器上接口 public class RMIS ...
- Java中RMI远程调用demo
Java远程方法调用,即Java RMI(Java Remote Method Invocation),一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远程服务器上的对象.远 ...
- java项目中rmi远程调用实例
1.创建一个学生实体类Student.java: package com.RMIdemo.entity; @SuppressWarnings("serial") public cl ...
随机推荐
- 《JAVA开发环境的熟悉》实验报告——20145337
- Java数据库连接池
转载过来的,最近在做一个小网站,准备使用这种方法. Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...
- PowerDesigner 15.2入门学习 一
好久没有搞 PowerDesigner 然后记录一下 1.下载地址 http://download.sybase.com/eval/PowerDesigner/PowerDesigner152_Eva ...
- SQL Server 存储过程(转)
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...
- 【iCore3 双核心板_FPGA】实验十八:基于单口RAM的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1i58Ssvz iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- swift 2.x学习笔记(二)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0. ...
- ios-滚动视图滚动取消键盘
_scroll.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;_SearchTable.keyboardDismissMode ...
- 使用DB4o做一个.Net版的website(一)环境
一个机缘巧合之下,知道了DB4o这个数据库引擎,下载查看之后,被其方便.高效.以及便捷的管理方式锁折服. 故决定使用其做一个.NET版本的web站点,来巩固学到的知识,以及为后来人做一点点贡献. 首先 ...
- 分时间uu
#include<stdio.h> int map[20][4]; typedef struct node{ int star; int end; }node; node dui[10 ...
- linux常用操作指令
Linux常用操作指令: 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(a ...