CAS Java klient

Version 17.1 by Petr Abrahamczik on 07.02.2019 13:54

V ukázkovém příkladu je popsán základní způsob konfigurace webové aplikace v Javě pomocí Java Apereo CAS Client. Aplikace je schopna získat přihlášeného uživatele pomocí CAS v3 protokolu.

  1. Do webové aplikace je potřeba přidat knihovny klienta https://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core buď přímo a nebo pomocí nějakého buildovacího nástroje např. Maven.
    <dependency>
     <groupId>org.jasig.cas.client</groupId>
     <artifactId>cas-client-core</artifactId>
     <version>3.5.1</version>
    </dependency>
  2. Nakonfigurovat web.xml. V uvedené konfiguraci je nutné nahradit adresu klienta https://klient.vsb.cz s URL našeho serveru. V mapování filtru CAS Authentication Filter je možné uvést místo /* kontext do chráněné zóny aplikace např. /private/*
    <filter>
     <filter-name>CAS Single Sign Out Filter</filter-name>
     <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
     <init-param>
       <param-name>casServerUrlPrefix</param-name>
       <param-value>https://www.sso.vsb.cz</param-value>
     </init-param>
    </filter>  

    <filter>
     <filter-name>CAS Authentication Filter</filter-name>
     <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
     <init-param>
       <param-name>casServerUrlPrefix</param-name>
       <param-value>https://www.sso.vsb.cz</param-value>
     </init-param>
     <init-param>
       <param-name>serverName</param-name>
       <param-value>https://klient.vsb.cz</param-value>
     </init-param>
    </filter>
       
    <filter>
     <filter-name>CAS Validation Filter</filter-name>
     <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
     <init-param>
       <param-name>casServerUrlPrefix</param-name>
       <param-value>https://www.sso.vsb.cz</param-value>
     </init-param>
     <init-param>
       <param-name>serverName</param-name>
       <param-value>https://klient.vsb.cz</param-value>
     </init-param>  
    </filter>

    <filter>    
     <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
     <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>

    <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 Single Sign Out Filter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
     <filter-name>CAS Authentication Filter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
       
    <filter-mapping>
     <filter-name>CAS Validation Filter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
       
    <filter-mapping>
     <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
     <filter-name>CAS Assertion Thread Local Filter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>  

    <listener>
     <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    )))
    1. Pro odhlášení uživatele z CAS je potřeba přistoupit na url ##https:~/~/www.sso.vsb.cz/logout##.(((
       Před odhlášením z CAS je vhodné zrušit session v aplikaci klienta (zaleží to však na konkrétním klientu).

       Pokud po odhlášení z CAS nechceme aby uživatel zůstal na odhlašovací stránce CASu, můžeme k odhlašovací url přidat parametr 'service', který
       obsahuje url (nejlépe zakódovanou pomocí URL kódování) na kterou se má po odhlášení přesměrovat. Url musí obsahovat adresu, která je pro službu povolena.

       např. ##https:~/~/www.sso.vsb.cz/logout?service=https%3A%2F%2Fklient.vsb.cz##
    )))
    1. Přihlášenou osobu v aplikaci lze pak jednoduše zjistit pomoci(((
    {{code language="java"}}
    request.getRemoteUser();
    {{/code}}
    )))