<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Menlo;
panose-1:2 11 6 9 3 8 4 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:10.0pt;
font-family:"Calibri",sans-serif;}
p.p1, li.p1, div.p1
{mso-style-name:p1;
margin:0in;
font-size:8.5pt;
font-family:Menlo;
color:black;}
p.p2, li.p2, div.p2
{mso-style-name:p2;
margin:0in;
font-size:8.5pt;
font-family:Menlo;
color:black;}
span.s1
{mso-style-name:s1;}
span.apple-converted-space
{mso-style-name:apple-converted-space;}
span.EmailStyle23
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hi All,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Even though I have defined only ClientPersistentStorageService in idp.properties, why is it doing both ClientSessionStorageService and ClientPersistentStorageService?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">conf/idp.properties:<o:p></o:p></span></p>
<p class="p1"><span class="s1">idp.session.StorageService = shibboleth.ClientPersistentStorageService</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="p1"><span class="s1">2022-10-08 06:57:56,416 - 10.227.147.129 - DEBUG [org.opensaml.storage.impl.client.PopulateClientStorageLoadContext:118] - Profile Action PopulateClientStorageLoadContext: ClientStorageServices requiring load: [<span style="background:yellow;mso-highlight:yellow">shibboleth.ClientSessionStorageService,
shibboleth.ClientPersistentStorageService</span>]</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Also, even though ClientPersistentStorageService succeeded, why am I not seeing any data in the database?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="p1"><span class="s1">2022-10-08 06:58:16,819 - 10.227.147.129 - DEBUG [org.opensaml.storage.impl.client.LogLocalStorageSaveResults:81] - Profile Action LogLocalStorageSaveResults:
<span style="background:yellow;mso-highlight:yellow">Save to local storage for StorageService 'shibboleth.ClientPersistentStorageService' succeeded</span></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="p1"><span class="s1">MariaDB [mysql]> select * from storageservice.StorageRecords;</span><o:p></o:p></p>
<p class="p1"><span class="s1"><b>Empty set (0.000 sec)</b></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Thanks for your help.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Regards,<br>
Sunil<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">users <users-bounces@shibboleth.net> on behalf of Mathew, Sunil via users <users@shibboleth.net><br>
<b>Date: </b>Friday, October 7, 2022 at 12:11 PM<br>
<b>To: </b>Users@shibboleth.net <users@shibboleth.net><br>
<b>Cc: </b>Mathew, Sunil <smathew@hbs.edu><br>
<b>Subject: </b>Question about shibboleth.ClientPersistentStorageService<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I am trying to use shibboleth.ClientPersistentStorageService to store idp session. Here are the changes I made:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">conf/idp.properties:<o:p></o:p></span></p>
<p class="p1"><span class="s1">idp.session.StorageService = shibboleth.ClientPersistentStorageService</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">conf/global.xml<o:p></o:p></span></p>
<p class="p1"><span class="s1"><!-- DB-independent Configuration --></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><bean id="shibboleth.JPAStorageService"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">class="org.opensaml.storage.impl.JPAStorageService"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">p:cleanupInterval="%{idp.storage.cleanupInterval:PT10M}"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">c:factory-ref="shibboleth.JPAStorageService.EntityManagerFactory"/></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><bean id="shibboleth.JPAStorageService.EntityManagerFactory"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="persistenceUnitName" value="storageservice" /></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="packagesToScan" value="org.opensaml.storage.impl"/></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="dataSource" ref="shibboleth.JPAStorageService.DataSource"/></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="jpaVendorAdapter" ref="shibboleth.JPAStorageService.JPAVendorAdapter"/></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="jpaDialect"></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"></property></span><o:p></o:p></p>
<p class="p1"><span class="s1"></bean></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><!-- DB-dependent Configuration --></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><bean id="shibboleth.JPAStorageService.JPAVendorAdapter"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><property name="database" value="MYSQL" /></span><o:p></o:p></p>
<p class="p1"><span class="s1"></bean></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><!-- Bean to store IdP data unrelated with persistent identifiers on 'storageservice' database --></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1"><bean id="shibboleth.JPAStorageService.DataSource"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" lazy-init="true"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">p:driverClassName="com.mysql.jdbc.Driver"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">p:jdbcUrl="jdbc:mysql://localhost:3306/storageservice?autoReconnect=true"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">p:username="root"</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1">p:password="******" /></span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Here is the script that created the table:<o:p></o:p></span></p>
<p class="p1"><span class="s1">SET NAMES 'utf8';</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">SET CHARACTER SET utf8;</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">CREATE DATABASE IF NOT EXISTS storageservice CHARACTER SET=utf8;</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">GRANT ALL PRIVILEGES ON storageservice.* TO 'root'@'localhost';</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">-- ##_SS-DB_USER-PASSWORD-CHANGEME_## can't contain the characters:</span><span class="apple-converted-space">
</span><span class="s1">; </span><span class="apple-converted-space"> </span><span class="s1">&
</span><span class="apple-converted-space"> </span><span class="s1"># </span><span class="apple-converted-space">
</span><span class="s1"><</span><o:p></o:p></p>
<p class="p1"><span class="s1">CREATE USER IF NOT EXISTS 'root'@'localhost' IDENTIFIED BY '******';</span><o:p></o:p></p>
<p class="p1"><span class="s1">GRANT ALL PRIVILEGES ON storageservice.* TO 'root'@'localhost';</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">FLUSH PRIVILEGES;</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">USE storageservice;</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">CREATE TABLE IF NOT EXISTS StorageRecords</span><o:p></o:p></p>
<p class="p1"><span class="s1">(</span><o:p></o:p></p>
<p class="p1"><span class="s1">context VARCHAR(255) NOT NULL,</span><o:p></o:p></p>
<p class="p1"><span class="s1">id VARCHAR(255) NOT NULL,</span><o:p></o:p></p>
<p class="p1"><span class="s1">expires BIGINT(20) DEFAULT NULL,</span><o:p></o:p></p>
<p class="p1"><span class="s1">value LONGTEXT NOT NULL,</span><o:p></o:p></p>
<p class="p1"><span class="s1">version BIGINT(20) NOT NULL,</span><o:p></o:p></p>
<p class="p1"><span class="s1">PRIMARY KEY (context, id)</span><o:p></o:p></p>
<p class="p1"><span class="s1">);</span><o:p></o:p></p>
<p class="p2"> <o:p></o:p></p>
<p class="p1"><span class="s1">quit</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I am using mariadb database. I confirmed that mysql-connector-java.jar and HikariCP-5.0.1.jar are in idp.war WEB-INF/lib. Jetty server is starting with no errors and I am able to test SP login without any
issues.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">But I don’t see any records inserted into the table after successful login.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="p1"><span class="s1">> select * from storageservice.StorageRecords;</span><o:p></o:p></p>
<p class="p1"><span class="s1"><b>Empty set (0.000 sec)</b></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I added the following to logback.xml:<o:p></o:p></span></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><variable name="idp.loglevel.opensaml" value="${idp.loglevel.opensaml:-TRACE}" /></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><logger name="org.opensaml.saml" level="${idp.loglevel.opensaml}"/></span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space"> </span><span class="s1"><logger name="com.zaxxer.hikari" level="${idp.loglevel.opensaml}"/></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I am not seeing any database calls in the logs. How can I see the database calls?
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Can you please let me know if I missed anything.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Regards,<br>
Sunil<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> <o:p></o:p></span></p>
</div>
</body>
</html>