cas 登出界面和登出action的修改

来源:互联网 发布:react.js 中文文档 编辑:程序博客网 时间:2024/05/16 22:32

一.cas4.0的登出action执行之后,会进入一个logout successful界面,这个界面没有任何链接和跳转button,并不好看,准备替换成和login界面一致的页面。

tomcat上部署2个应用:cas server和app1。

1.[错误方向]一开始,直接替换logout的页面为login页面:

修改cas server中的my_views.properties(自定义的view properties,用于替换cas原先的default_views.properties):

casLogoutView.url=/WEB-INF/view/jsp/default/ui/casLogoutView.jsp


结果点击logout之后报错一大堆:

ERROR [org.springframework.web.servlet.tags.form.InputTag] - <Neither BindingResult nor plain target object for bean name '' available as request attribute>

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name '' available as request attribute

at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)

at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:179)

at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:199)

。。。(等等一堆)

网上搜了一大堆,定位问题为,casLoginView.jsp中引用1行:

  <form:form method="post" id="fm1" commandName="${commandName}" htmlEscape="true">

这个commandName在login-webflow.xml中定义了,在logout-webflow.xml中么有定义,所以报错了。


第1个解决方案为

2.[正确方向]修改casLogoutView.jsp:

<jsp:forward page="/sso/login"/>



3.[正确方向]修改casLogoutView.jsp:

<jsp:redirect page="/sso/login"/>

结果正确~不过多此一举啊喂。。


二.cas登出操作之后,在浏览器点击回退,发现浏览器的session info并没有清除干净,导致页面存在不安全风险。

所以在cas server的casLogoutView.jsp加上一段:

<%session.invalidate();%>


结果奏效。


三.logout之后再logon,进入的是cas的默认登陆界面,而不是logout之前的应用app1的界面,这种action并不友好。修改app1的登出action:

1.app1中添加1个logout.jsp:

<html><body><%response.sendRedirect(application.getInitParameter("casServerLogoutUrl")    + "?service="    + application.getInitParameter("serverName") + "/uwt");%></body></html>

2.app1的web.xml中添加:

<pre name="code" class="html">   <context-param>        <param-name>casServerLogoutUrl</param-name>        <param-value>https://***.com:8443/sso/logout</param-value>    </context-param>    <context-param>        <param-name>serverName</param-name>        <param-value>http://***.com:8080</param-value>    </context-param>


这样登出后再登陆,进入的仍然是登出前的应用app1。

0 0