cas原理Word文件下载.docx

上传人:b****1 文档编号:4398837 上传时间:2023-05-03 格式:DOCX 页数:22 大小:118.28KB
下载 相关 举报
cas原理Word文件下载.docx_第1页
第1页 / 共22页
cas原理Word文件下载.docx_第2页
第2页 / 共22页
cas原理Word文件下载.docx_第3页
第3页 / 共22页
cas原理Word文件下载.docx_第4页
第4页 / 共22页
cas原理Word文件下载.docx_第5页
第5页 / 共22页
cas原理Word文件下载.docx_第6页
第6页 / 共22页
cas原理Word文件下载.docx_第7页
第7页 / 共22页
cas原理Word文件下载.docx_第8页
第8页 / 共22页
cas原理Word文件下载.docx_第9页
第9页 / 共22页
cas原理Word文件下载.docx_第10页
第10页 / 共22页
cas原理Word文件下载.docx_第11页
第11页 / 共22页
cas原理Word文件下载.docx_第12页
第12页 / 共22页
cas原理Word文件下载.docx_第13页
第13页 / 共22页
cas原理Word文件下载.docx_第14页
第14页 / 共22页
cas原理Word文件下载.docx_第15页
第15页 / 共22页
cas原理Word文件下载.docx_第16页
第16页 / 共22页
cas原理Word文件下载.docx_第17页
第17页 / 共22页
cas原理Word文件下载.docx_第18页
第18页 / 共22页
cas原理Word文件下载.docx_第19页
第19页 / 共22页
cas原理Word文件下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

cas原理Word文件下载.docx

《cas原理Word文件下载.docx》由会员分享,可在线阅读,更多相关《cas原理Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。

cas原理Word文件下载.docx

 

<

servlet-name>

cas<

/servlet-name>

servlet-class>

org.jasig.cas.web.init.SafeDispatcherServlet<

/servlet-class>

init-param>

param-name>

publishContext<

/param-name>

param-value>

false<

/param-value>

/init-param>

load-on-startup>

1<

/load-on-startup>

/servlet>

servlet-mapping>

url-pattern>

/login<

/url-pattern>

/servlet-mapping>

...

!

--其他casservletmapping-->

所有映射到cas 

servlet上的请求都将经过/WEB-INF/cas-servlet.xml检查确定进入哪个Action,cas-servlet.xml中最重要的两个bean就是handlerMappingB和handlerMappingC

handlerMappingB配置了登陆流程进入的路径映射,而handlerMappingC则配置了其他的流程的路径映射。

/WEB-INF/login-webflow.xml流程配置文件即是在handlerMappingB中通过/login映射进入的。

Webflow依据一个生成的flowExecutionKey来确定一个流程实例走到了哪一步,每次页面流程运转总是需要提交这个flowExecutionKey来告诉webflow它是从流程的哪个位置出发的有了以上理论作为依据,我们在下一节就可以根据自己的需要修改流程,使之支持远程登录了

服务器登陆流程修改目标

修改后的登陆流程活动图如下:

图中橙色为我们修改的流程节点,这里我们增加了一个开始节点remoteLogin和一个结束节点

remoteCallbackView,删除了原有的loginFormView节点、 

viewGenericLoginSuccess以及

renew节点(renew节点由于系统无此需求而删除),然后将所有这些节点的转向全部都转向

到remoteCallbackView节点,因为登陆和显示登陆成功信息都应该是客户端完成的

服务器端实现目标

好了,原理到这里已经啰嗦完了,下一节讲如何着手修改CAS服务器端啦

修改需要基于几个基本原则:

不影响原有统一登陆界面功能

客户端应尽量保持简单

尽量保证原有功能的完整性和安全性

对于第三点,必须事先说明:

将登陆页面放到客户端本身就是降低了CAS安全性,这意味着作为服务向外发布的CAS服务器中的用户密码有可能由于客户端的不安全性而导致泄露,整个CAS系统成为了一个“水桶形态”,整个CAS体系的安全性将取决于所有客户端中安全性最低的一个。

这也是CAS官方一直不推荐的方式。

服务器端修改

接下来我们讲解服务器端修改的详细过程:

首先,修改/WEB-INF/web.xml,为cas增加一个/remoteLogin的映射:

/remoteLogin<

然后修改cas-servlet.xml文件,增加我们对/remoteLogin映射的处理,需要增加一个新流程:

beanid="

handlerMappingB"

class="

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"

>

propertyname="

mappings"

props>

propkey="

/login"

loginController<

/prop>

/remoteLogin"

remoteController<

/props>

/property>

interceptors"

list>

refbean="

localeChangeInterceptor"

/>

/list>

/bean>

然后在cas-servlet.xml文件中添加我们上面所配置的remoteController的bean:

--增加远程控制者,允许以/remote请求启动remote控制流程-->

remoteLoginController"

class="

org.springframework.webflow.executor.mvc.FlowController"

p:

flowExecutor-ref="

remoteLoginFlowExecutor"

defaultFlowId="

remoteLogin-webflow"

argumentHandler"

bean

org.springframework.webflow.executor.support.RequestParameterFlowExecutorArgumentHandler"

flowExecutionKeyArgumentName="

lt"

flow:

executorid="

registry-ref="

remoteLoginFlowRegistry"

execution-attributes>

alwaysRedirectOnPausevalue="

false"

/>

/flow:

executor>

registryid="

locationpath="

/WEB-INF/remoteLogin-webflow.xml"

registry>

可以看到上面将请求指向了webflow配置文件/WEB-INF/remoteLogin-webflow.xml文件,我们需要创建此文件并配置其成为我们所需的流程,以下是remoteLogin-webflow.xml全文:

?

xmlversion="

1.0"

encoding="

UTF-8"

flowxmlns="

http:

//www.springframework.org/schema/webflow"

xmlns:

xsi="

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

http:

//www.springframework.org/schema/webflow

//www.springframework.org/schema/webflow/spring-webflow-1.0.xsd"

start-stateidref="

remoteLogin"

--远程登陆主要Action-->

action-stateid="

actionbean="

remoteLoginAction"

transitionon="

error"

to="

remoteCallbackView"

submit"

bindAndValidate"

checkTicketGrantingTicket"

ticketGrantingTicketExistsCheck"

/action-state>

--远程回调页面,主要以JavaScript的方式回传一些参数用-->

end-stateid="

view="

decision-stateid="

iftest="

${flowScope.ticketGrantingTicketId!

=null}"

then="

hasServiceCheck"

else="

gatewayRequestCheck"

/decision-state>

${externalContext.requestParameterMap['

gateway'

]!

='

'

&

amp;

&

externalContext.requestParameterMap['

=null&

flowScope.service!

null}"

redirect"

else="

${flowScope.service!

generateServiceTicket"

--

The"

warn"

actionmakesthedeterminationofwhethertoredirectdirectlytothe

requested

serviceordisplaythe"

confirmation"

pagetogobacktotheserver.

-->

${flowScope.warnCookieValue}"

showWarningView"

authenticationViaFormAction"

success"

method="

sendTicketGrantingTicket"

sendTicketGrantingTicketAction"

serviceCheck"

generateServiceTicketAction"

to="

gateway"

endstateistheendstateforwhentheuserhasrequested

privacysettings(tobe"

warned"

)tobeturnedon. 

Itdelegatestoa

viewdefinesindefault_views.propertiesthatdisplaythe"

Pleaseclickheretogo

totheservice."

message.

casLoginConfirmView"

endstateallowsCAStoproperlyendtheworkflowwhilestill

redirecting

theuserbacktotheservicerequired.

bean:

dynamicRedirectViewSelector"

viewServiceErrorView"

viewServiceSsoErrorView"

global-transitions>

transitionto="

on-

exception="

org.springframework.webflow.execution.repository.NoSuchFlowExecutionException"

/

org.jasig.cas.services.UnauthorizedSsoServiceException"

org.jasig.cas.services.UnauthorizedServiceException"

/global-transitions>

/flow>

以上文件根据原login-webflow.xml文件修改,黄色背景为修改部分。

可以看到,我们在流程中增加了remoteLoginAction节点和remoteCallbackView节点,下面我们配置remoteLogin节点:

在/WEB-INF/cas-servlet.xml文件中增加remoteLoginAction配置:

com.baidu.cas.web.flow.RemoteLoginAction"

argumentExtractors-ref="

argumentExtractors"

warnCookieGenerator-ref="

warnCookieGenerator"

ticketGrantingTicketCookieGenerator-ref="

ticketGrantingTicketCookieGenerator"

同时创建com.baidu.cas.web.flow.RemoteLoginAction类:

/**

*远程登陆票据提供Action.

*根据InitialFlowSetupAction修改.

*由于InitialFlowSetupAction为final类,因此只能将代码复制过来再进行修改.

*

*@authorGuoLin

*/

publicclassRemoteLoginActionextendsAbstractAction{

/**CookieGeneratorfortheWarnings.*/

@NotNull

privateCookieRetrievingCookieGeneratorwarnCookieGenerator;

/**CookieGeneratorfortheTicketGrantingTickets.*/

privateCookieRetrievingCookieGeneratorticketGrantingTicketCookieGenerator;

/**Extractorsforfindingtheservice.*/

@NotEmpty

privateList<

ArgumentExtractor>

argumentExtractors;

/**Booleantonotewhetherwe'

vesetthevaluesonthegeneratorsornot.*/

privatebooleanpathPopulated=false;

protectedEventdoExecute(finalRequestContextcontext)throwsException{

finalHttpServletRequestrequest=WebUtils.getHttpServletRequest(context);

if(!

this.pathPopulated){

finalStringcontextPath=context.getExternalContext().getContextPath();

finalStringcookiePath=StringUtils.hasText(contextPath)?

contextPath:

"

/"

;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2