シングルサインオン-CAS【五】シングルサインオン
5479 ワード
一、クライアントWebの構成xml
説明:このfilterは必ず別のfilterの前に置いてください.
CAS Single Sign Out Filterを実行する前に、別のことをしたい場合は、servletをカスタマイズできます.
説明:httpsプロトコルを使用する理由を登録します.
私たちは...xmlは原因を見つけます:
p:cookieSecure=「true」は、クライアントとCasサーバ間でHTTPSまたは他のセキュリティプロトコルを介してデータを転送するように要求する役割を果たします.
CookieのSecureプロパティは、CookieとCas Serverサーバ間のデータ転送プロセスの暗号化を保証するだけで、ローカルに保存されているcookieファイルは暗号化されません.
HTTPSプロトコルで登録しないと、登録は成功しないことがわかります.提出された内容をfireBugで確認したところ、ログアウトが見つかった場合、関連するクッキーはありません.
二、ログイン成功後、ログインページにリダイレクトする
cas-servlet.xmlでlogoutControllerのp:followServiceRedirects="${cas.logout.followServiceRedirects:false}"のデフォルトはfalse
trueに変更し、ビジネスシステムのログアウト接続に「サービスパラメータ」を追加し、ビジネスシステムの絶対URLに値を付けるだけでOKです.例えば、https://sso.wy.com:8443/cas-server/login?service=http://127.0.0.1:8081/cas-test
三、カスタムサーブレット
<!-- , -->
<listener>
<listener-class>org.jasig.cas.client.javafilter.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>
説明:このfilterは必ず別のfilterの前に置いてください.
CAS Single Sign Out Filterを実行する前に、別のことをしたい場合は、servletをカスタマイズできます.
<!-- -->
<servlet>
<servlet-name>LogOutServlet</servlet-name>
<servlet-class>com.wy.cas.client.servlet.LogOutServlet</servlet-class>
<init-param>
<param-name>serverLogoutUrl</param-name>
<param-value>https://sso.wy.com:8443/cas-server/logout</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1:8081/cas-test</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>LogOutServlet</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
説明:httpsプロトコルを使用する理由を登録します.
私たちは...xmlは原因を見つけます:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<description>
Defines the cookie that stores the TicketGrantingTicket. You most likely should never modify these (especially the "secure" property).
You can change the name if you want to make it harder for people to guess.
</description>
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
</beans>
p:cookieSecure=「true」は、クライアントとCasサーバ間でHTTPSまたは他のセキュリティプロトコルを介してデータを転送するように要求する役割を果たします.
CookieのSecureプロパティは、CookieとCas Serverサーバ間のデータ転送プロセスの暗号化を保証するだけで、ローカルに保存されているcookieファイルは暗号化されません.
HTTPSプロトコルで登録しないと、登録は成功しないことがわかります.提出された内容をfireBugで確認したところ、ログアウトが見つかった場合、関連するクッキーはありません.
二、ログイン成功後、ログインページにリダイレクトする
cas-servlet.xmlでlogoutControllerのp:followServiceRedirects="${cas.logout.followServiceRedirects:false}"のデフォルトはfalse
trueに変更し、ビジネスシステムのログアウト接続に「サービスパラメータ」を追加し、ビジネスシステムの絶対URLに値を付けるだけでOKです.例えば、https://sso.wy.com:8443/cas-server/login?service=http://127.0.0.1:8081/cas-test
<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:logoutView="casLogoutView"
p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
p:servicesManager-ref="servicesManager"
p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>
三、カスタムサーブレット
public class LogOutServlet extends javax.servlet.http.HttpServlet{
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogOutServlet() {
super();
}
public static String serverLogoutUrl = "";
public static String serverName = "";
public void init() throws ServletException {
serverLogoutUrl = this.getInitParameter("serverLogoutUrl");
serverName = this.getInitParameter("serverName");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserInfo user = new UserInfo();
response.sendRedirect(serverLogoutUrl + "?service=" + serverName + "&username=" + user.getIscUserSourceId());
}
}