Produced by Araxis Merge on 11/20/2017 2:15:52 PM GMT Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.
| # | Location | File | Last Modified |
|---|---|---|---|
| 1 | C:\Merge Test Files\8.0.47\java\org\apache\catalina\authenticator | SingleSignOn.java | Fri Sep 29 16:53:28 2017 UTC |
| 2 | C:\Merge Test Files\8.5.23\java\org\apache\catalina\authenticator | SingleSignOn.java | Thu Sep 28 11:32:16 2017 UTC |
| 3 | C:\Merge Test Files\9.0.1\java\org\apache\catalina\authenticator | SingleSignOn.java | Wed Sep 27 18:33:40 2017 UTC |
| Note: Merge considers the second file to be the common ancestor of the others. | |||
| Description | Between Files 1 and 2 |
Between Files 2 and 3 |
Relative to Common Ancestor |
|||
|---|---|---|---|---|---|---|
| Text Blocks | Lines | Text Blocks | Lines | Text Blocks | Lines | |
| Unchanged | 2 | 1236 | 1 | 1238 | ||
| Changed | 1 | 2 | 0 | 0 | 1 | 2 |
| Inserted | 0 | 0 | 0 | 0 | 0 | 0 |
| Removed | 0 | 0 | 0 | 0 | 0 | 0 |
| Note: An automatic merge would leave 0 conflict(s). | ||||||
| Whitespace | Consecutive whitespace is treated as a single space |
|---|---|
| Character case | Differences in character case are significant |
| Line endings | Differences in line endings (CR and LF characters) are ignored |
| CR/LF characters | Not shown in the comparison detail |
No regular expressions were active.
| 1 | /* | 1 | /* | 1 | /* | |||||
| 2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | 2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | 2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | |||||
| 3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | 3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | 3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | |||||
| 4 | * this wo rk for add itional in formation regarding copyright ownership. | 4 | * this wo rk for add itional in formation regarding copyright ownership. | 4 | * this wo rk for add itional in formation regarding copyright ownership. | |||||
| 5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | 5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | 5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | |||||
| 6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | 6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | 6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | |||||
| 7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | 7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | 7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | |||||
| 8 | * | 8 | * | 8 | * | |||||
| 9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | 9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | 9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | |||||
| 10 | * | 10 | * | 10 | * | |||||
| 11 | * Unless required b y applicab le law or agreed to in writing , software | 11 | * Unless required b y applicab le law or agreed to in writing , software | 11 | * Unless required b y applicab le law or agreed to in writing , software | |||||
| 12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | 12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | 12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | |||||
| 13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | 13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | 13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | |||||
| 14 | * See the License f or the spe cific lang uage gover ning permi ssions and | 14 | * See the License f or the spe cific lang uage gover ning permi ssions and | 14 | * See the License f or the spe cific lang uage gover ning permi ssions and | |||||
| 15 | * limitat ions under the Licen se. | 15 | * limitat ions under the Licen se. | 15 | * limitat ions under the Licen se. | |||||
| 16 | */ | 16 | */ | 16 | */ | |||||
| 17 | package or g.apache.c atalina.au thenticato r; | 17 | package or g.apache.c atalina.au thenticato r; | 17 | package or g.apache.c atalina.au thenticato r; | |||||
| 18 | 18 | 18 | ||||||||
| 19 | import jav a.io.IOExc eption; | 19 | import jav a.io.IOExc eption; | 19 | import jav a.io.IOExc eption; | |||||
| 20 | import jav a.security .Principal ; | 20 | import jav a.security .Principal ; | 20 | import jav a.security .Principal ; | |||||
| 21 | import jav a.util.Map ; | 21 | import jav a.util.Map ; | 21 | import jav a.util.Map ; | |||||
| 22 | import jav a.util.Set ; | 22 | import jav a.util.Set ; | 22 | import jav a.util.Set ; | |||||
| 23 | import jav a.util.con current.Co ncurrentHa shMap; | 23 | import jav a.util.con current.Co ncurrentHa shMap; | 23 | import jav a.util.con current.Co ncurrentHa shMap; | |||||
| 24 | 24 | 24 | ||||||||
| 25 | import jav ax.servlet .ServletEx ception; | 25 | import jav ax.servlet .ServletEx ception; | 25 | import jav ax.servlet .ServletEx ception; | |||||
| 26 | import jav ax.servlet .http.Cook ie; | 26 | import jav ax.servlet .http.Cook ie; | 26 | import jav ax.servlet .http.Cook ie; | |||||
| 27 | 27 | 27 | ||||||||
| 28 | import org .apache.ca talina.Con tainer; | 28 | import org .apache.ca talina.Con tainer; | 28 | import org .apache.ca talina.Con tainer; | |||||
| 29 | import org .apache.ca talina.Con text; | 29 | import org .apache.ca talina.Con text; | 29 | import org .apache.ca talina.Con text; | |||||
| 30 | import org .apache.ca talina.Eng ine; | 30 | import org .apache.ca talina.Eng ine; | 30 | import org .apache.ca talina.Eng ine; | |||||
| 31 | import org .apache.ca talina.Lif ecycleExce ption; | 31 | import org .apache.ca talina.Lif ecycleExce ption; | 31 | import org .apache.ca talina.Lif ecycleExce ption; | |||||
| 32 | import org .apache.ca talina.Man ager; | 32 | import org .apache.ca talina.Man ager; | 32 | import org .apache.ca talina.Man ager; | |||||
| 33 | import org .apache.ca talina.Rea lm; | 33 | import org .apache.ca talina.Rea lm; | 33 | import org .apache.ca talina.Rea lm; | |||||
| 34 | import org .apache.ca talina.Ses sion; | 34 | import org .apache.ca talina.Ses sion; | 34 | import org .apache.ca talina.Ses sion; | |||||
| 35 | import org .apache.ca talina.Ses sionListen er; | 35 | import org .apache.ca talina.Ses sionListen er; | 35 | import org .apache.ca talina.Ses sionListen er; | |||||
| 36 | import org .apache.ca talina.con nector.Req uest; | 36 | import org .apache.ca talina.con nector.Req uest; | 36 | import org .apache.ca talina.con nector.Req uest; | |||||
| 37 | import org .apache.ca talina.con nector.Res ponse; | 37 | import org .apache.ca talina.con nector.Res ponse; | 37 | import org .apache.ca talina.con nector.Res ponse; | |||||
| 38 | import org .apache.ca talina.val ves.ValveB ase; | 38 | import org .apache.ca talina.val ves.ValveB ase; | 38 | import org .apache.ca talina.val ves.ValveB ase; | |||||
| 39 | import org .apache.to mcat.util. res.String Manager; | 39 | import org .apache.to mcat.util. res.String Manager; | 39 | import org .apache.to mcat.util. res.String Manager; | |||||
| 40 | 40 | 40 | ||||||||
| 41 | /** | 41 | /** | 41 | /** | |||||
| 42 | * A <stro ng>Valve</ strong> th at support s a "singl e sign on" user expe rience, | 42 | * A <stro ng>Valve</ strong> th at support s a "singl e sign on" user expe rience, | 42 | * A <stro ng>Valve</ strong> th at support s a "singl e sign on" user expe rience, | |||||
| 43 | * where t he securit y identity of a user who succe ssfully au thenticate s to one | 43 | * where t he securit y identity of a user who succe ssfully au thenticate s to one | 43 | * where t he securit y identity of a user who succe ssfully au thenticate s to one | |||||
| 44 | * web app lication i s propagat ed to othe r web appl ications i n the same | 44 | * web app lication i s propagat ed to othe r web appl ications i n the same | 44 | * web app lication i s propagat ed to othe r web appl ications i n the same | |||||
| 45 | * securit y domain. For succe ssful use, the follo wing requi rements mu st | 45 | * securit y domain. For succe ssful use, the follo wing requi rements mu st | 45 | * securit y domain. For succe ssful use, the follo wing requi rements mu st | |||||
| 46 | * be met: | 46 | * be met: | 46 | * be met: | |||||
| 47 | * <ul> | 47 | * <ul> | 47 | * <ul> | |||||
| 48 | * <li>Thi s Valve mu st be conf igured on the Contai ner that r epresents a | 48 | * <li>Thi s Valve mu st be conf igured on the Contai ner that r epresents a | 48 | * <li>Thi s Valve mu st be conf igured on the Contai ner that r epresents a | |||||
| 49 | * vir tual host (typically an implem entation o f <code>Ho st</code>) .</li> | 49 | * vir tual host (typically an implem entation o f <code>Ho st</code>) .</li> | 49 | * vir tual host (typically an implem entation o f <code>Ho st</code>) .</li> | |||||
| 50 | * <li>The <code>Rea lm</code> that conta ins the sh ared user and role | 50 | * <li>The <code>Rea lm</code> that conta ins the sh ared user and role | 50 | * <li>The <code>Rea lm</code> that conta ins the sh ared user and role | |||||
| 51 | * inf ormation m ust be con figured on the same Container (or a high er | 51 | * inf ormation m ust be con figured on the same Container (or a high er | 51 | * inf ormation m ust be con figured on the same Container (or a high er | |||||
| 52 | * one ), and not overridde n at the w eb applica tion level .</li> | 52 | * one ), and not overridde n at the w eb applica tion level .</li> | 52 | * one ), and not overridde n at the w eb applica tion level .</li> | |||||
| 53 | * <li>The web appli cations th emselves m ust use on e of the s tandard | 53 | * <li>The web appli cations th emselves m ust use on e of the s tandard | 53 | * <li>The web appli cations th emselves m ust use on e of the s tandard | |||||
| 54 | * Aut henticator s found in the | 54 | * Aut henticator s found in the | 54 | * Aut henticator s found in the | |||||
| 55 | * <co de>org.apa che.catali na.authent icator</co de> packag e.</li> | 55 | * <co de>org.apa che.catali na.authent icator</co de> packag e.</li> | 55 | * <co de>org.apa che.catali na.authent icator</co de> packag e.</li> | |||||
| 56 | * </ul> | 56 | * </ul> | 56 | * </ul> | |||||
| 57 | * | 57 | * | 57 | * | |||||
| 58 | * @author Craig R. McClanahan | 58 | * @author Craig R. McClanahan | 58 | * @author Craig R. McClanahan | |||||
| 59 | */ | 59 | */ | 59 | */ | |||||
| 60 | public cla ss SingleS ignOn exte nds ValveB ase { | 60 | public cla ss SingleS ignOn exte nds ValveB ase { | 60 | public cla ss SingleS ignOn exte nds ValveB ase { | |||||
| 61 | 61 | 61 | ||||||||
| 62 | private st atic final StringMan ager sm = StringMana ger.getMan ager( Co n sta n ts . Pa c k a ge ); | 62 |
private st
atic final
StringMan
ager sm =
StringMana
ger.getMan
ager(
Si
n
gleSignO
n
|
62 | privat e static f inal Strin gManager s m = String Manager.ge tManager(S ingleSignO n.class); | |||||
| 63 | 63 | 63 | ||||||||
| 64 | /* The engine at the top o f the cont ainer hier archy in w hich this SSO Valve | 64 | /* The engine at the top o f the cont ainer hier archy in w hich this SSO Valve | 64 | /* The engine at the top o f the cont ainer hier archy in w hich this SSO Valve | |||||
| 65 | * has been plac ed. It is used to ge t back to a session object fro m a | 65 | * has been plac ed. It is used to ge t back to a session object fro m a | 65 | * has been plac ed. It is used to ge t back to a session object fro m a | |||||
| 66 | * Sin gleSignOnS essionKey and is upd ated when the Valve starts and stops. | 66 | * Sin gleSignOnS essionKey and is upd ated when the Valve starts and stops. | 66 | * Sin gleSignOnS essionKey and is upd ated when the Valve starts and stops. | |||||
| 67 | */ | 67 | */ | 67 | */ | |||||
| 68 | privat e Engine e ngine; | 68 | privat e Engine e ngine; | 68 | privat e Engine e ngine; | |||||
| 69 | 69 | 69 | ||||||||
| 70 | //---- ---------- ---------- ---------- ---------- ---------- Construct or | 70 | //---- ---------- ---------- ---------- ---------- ---------- Construct or | 70 | //---- ---------- ---------- ---------- ---------- ---------- Construct or | |||||
| 71 | 71 | 71 | ||||||||
| 72 | public SingleSig nOn() { | 72 | public SingleSig nOn() { | 72 | public SingleSig nOn() { | |||||
| 73 | su per(true); | 73 | su per(true); | 73 | su per(true); | |||||
| 74 | } | 74 | } | 74 | } | |||||
| 75 | 75 | 75 | ||||||||
| 76 | 76 | 76 | ||||||||
| 77 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | 77 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | 77 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | |||||
| 78 | 78 | 78 | ||||||||
| 79 | /** | 79 | /** | 79 | /** | |||||
| 80 | * The cache of SingleSign OnEntry in stances fo r authenti cated Prin cipals, | 80 | * The cache of SingleSign OnEntry in stances fo r authenti cated Prin cipals, | 80 | * The cache of SingleSign OnEntry in stances fo r authenti cated Prin cipals, | |||||
| 81 | * key ed by the cookie val ue that is used to s elect them . | 81 | * key ed by the cookie val ue that is used to s elect them . | 81 | * key ed by the cookie val ue that is used to s elect them . | |||||
| 82 | */ | 82 | */ | 82 | */ | |||||
| 83 | protec ted Map<St ring,Singl eSignOnEnt ry> cache = new Conc urrentHash Map<>(); | 83 | protec ted Map<St ring,Singl eSignOnEnt ry> cache = new Conc urrentHash Map<>(); | 83 | protec ted Map<St ring,Singl eSignOnEnt ry> cache = new Conc urrentHash Map<>(); | |||||
| 84 | 84 | 84 | ||||||||
| 85 | /** | 85 | /** | 85 | /** | |||||
| 86 | * Ind icates whe ther this valve shou ld require a downstr eam Authen ticator to | 86 | * Ind icates whe ther this valve shou ld require a downstr eam Authen ticator to | 86 | * Ind icates whe ther this valve shou ld require a downstr eam Authen ticator to | |||||
| 87 | * rea uthenticat e each req uest, or i f it itsel f can bind a UserPri ncipal | 87 | * rea uthenticat e each req uest, or i f it itsel f can bind a UserPri ncipal | 87 | * rea uthenticat e each req uest, or i f it itsel f can bind a UserPri ncipal | |||||
| 88 | * and AuthType object to the reques t. | 88 | * and AuthType object to the reques t. | 88 | * and AuthType object to the reques t. | |||||
| 89 | */ | 89 | */ | 89 | */ | |||||
| 90 | privat e boolean requireRea uthenticat ion = fals e; | 90 | privat e boolean requireRea uthenticat ion = fals e; | 90 | privat e boolean requireRea uthenticat ion = fals e; | |||||
| 91 | 91 | 91 | ||||||||
| 92 | /** | 92 | /** | 92 | /** | |||||
| 93 | * Opt ional SSO cookie dom ain. | 93 | * Opt ional SSO cookie dom ain. | 93 | * Opt ional SSO cookie dom ain. | |||||
| 94 | */ | 94 | */ | 94 | */ | |||||
| 95 | privat e String c ookieDomai n; | 95 | privat e String c ookieDomai n; | 95 | privat e String c ookieDomai n; | |||||
| 96 | 96 | 96 | ||||||||
| 97 | 97 | 97 | ||||||||
| 98 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | 98 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | 98 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | |||||
| 99 | 99 | 99 | ||||||||
| 100 | /** | 100 | /** | 100 | /** | |||||
| 101 | * Ret urns the o ptional co okie domai n. | 101 | * Ret urns the o ptional co okie domai n. | 101 | * Ret urns the o ptional co okie domai n. | |||||
| 102 | * May return nu ll. | 102 | * May return nu ll. | 102 | * May return nu ll. | |||||
| 103 | * | 103 | * | 103 | * | |||||
| 104 | * @re turn The c ookie doma in | 104 | * @re turn The c ookie doma in | 104 | * @re turn The c ookie doma in | |||||
| 105 | */ | 105 | */ | 105 | */ | |||||
| 106 | public String ge tCookieDom ain() { | 106 | public String ge tCookieDom ain() { | 106 | public String ge tCookieDom ain() { | |||||
| 107 | re turn cooki eDomain; | 107 | re turn cooki eDomain; | 107 | re turn cooki eDomain; | |||||
| 108 | } | 108 | } | 108 | } | |||||
| 109 | 109 | 109 | ||||||||
| 110 | 110 | 110 | ||||||||
| 111 | /** | 111 | /** | 111 | /** | |||||
| 112 | * Set s the doma in to be u sed for ss o cookies. | 112 | * Set s the doma in to be u sed for ss o cookies. | 112 | * Set s the doma in to be u sed for ss o cookies. | |||||
| 113 | * | 113 | * | 113 | * | |||||
| 114 | * @pa ram cookie Domain coo kie domain name | 114 | * @pa ram cookie Domain coo kie domain name | 114 | * @pa ram cookie Domain coo kie domain name | |||||
| 115 | */ | 115 | */ | 115 | */ | |||||
| 116 | public void setC ookieDomai n(String c ookieDomai n) { | 116 | public void setC ookieDomai n(String c ookieDomai n) { | 116 | public void setC ookieDomai n(String c ookieDomai n) { | |||||
| 117 | if (cookieDo main != nu ll && cook ieDomain.t rim().leng th() == 0) { | 117 | if (cookieDo main != nu ll && cook ieDomain.t rim().leng th() == 0) { | 117 | if (cookieDo main != nu ll && cook ieDomain.t rim().leng th() == 0) { | |||||
| 118 | this.coo kieDomain = null; | 118 | this.coo kieDomain = null; | 118 | this.coo kieDomain = null; | |||||
| 119 | } else { | 119 | } else { | 119 | } else { | |||||
| 120 | this.coo kieDomain = cookieDo main; | 120 | this.coo kieDomain = cookieDo main; | 120 | this.coo kieDomain = cookieDo main; | |||||
| 121 | } | 121 | } | 121 | } | |||||
| 122 | } | 122 | } | 122 | } | |||||
| 123 | 123 | 123 | ||||||||
| 124 | 124 | 124 | ||||||||
| 125 | /** | 125 | /** | 125 | /** | |||||
| 126 | * Get s whether each reque st needs t o be reaut henticated (by an | 126 | * Get s whether each reque st needs t o be reaut henticated (by an | 126 | * Get s whether each reque st needs t o be reaut henticated (by an | |||||
| 127 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | 127 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | 127 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | |||||
| 128 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | 128 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | 128 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | |||||
| 129 | * to the reques t based on the prese nce of a v alid SSO e ntry witho ut | 129 | * to the reques t based on the prese nce of a v alid SSO e ntry witho ut | 129 | * to the reques t based on the prese nce of a v alid SSO e ntry witho ut | |||||
| 130 | * rec hecking wi th the <co de>Realm</ code>. | 130 | * rec hecking wi th the <co de>Realm</ code>. | 130 | * rec hecking wi th the <co de>Realm</ code>. | |||||
| 131 | * | 131 | * | 131 | * | |||||
| 132 | * @re turn <cod e>true</co de> if it is require d that a d ownstream | 132 | * @re turn <cod e>true</co de> if it is require d that a d ownstream | 132 | * @re turn <cod e>true</co de> if it is require d that a d ownstream | |||||
| 133 | * Auth enticator reauthenti cate each request be fore calls to | 133 | * Auth enticator reauthenti cate each request be fore calls to | 133 | * Auth enticator reauthenti cate each request be fore calls to | |||||
| 134 | * <cod e>HttpServ letRequest .setUserPr incipal()< /code> | 134 | * <cod e>HttpServ letRequest .setUserPr incipal()< /code> | 134 | * <cod e>HttpServ letRequest .setUserPr incipal()< /code> | |||||
| 135 | * and <code>Http ServletReq uest.setAu thType()</ code> are made; | 135 | * and <code>Http ServletReq uest.setAu thType()</ code> are made; | 135 | * and <code>Http ServletReq uest.setAu thType()</ code> are made; | |||||
| 136 | * <cod e>false</c ode> if th e <code>Va lve</code> can itsel f make | 136 | * <cod e>false</c ode> if th e <code>Va lve</code> can itsel f make | 136 | * <cod e>false</c ode> if th e <code>Va lve</code> can itsel f make | |||||
| 137 | * thos e calls re lying on t he presenc e of a val id SingleS ignOn | 137 | * thos e calls re lying on t he presenc e of a val id SingleS ignOn | 137 | * thos e calls re lying on t he presenc e of a val id SingleS ignOn | |||||
| 138 | * entr y associat ed with th e request. | 138 | * entr y associat ed with th e request. | 138 | * entr y associat ed with th e request. | |||||
| 139 | * | 139 | * | 139 | * | |||||
| 140 | * @se e #setRequ ireReauthe ntication | 140 | * @se e #setRequ ireReauthe ntication | 140 | * @se e #setRequ ireReauthe ntication | |||||
| 141 | */ | 141 | */ | 141 | */ | |||||
| 142 | public boolean g etRequireR eauthentic ation() { | 142 | public boolean g etRequireR eauthentic ation() { | 142 | public boolean g etRequireR eauthentic ation() { | |||||
| 143 | re turn requi reReauthen tication; | 143 | re turn requi reReauthen tication; | 143 | re turn requi reReauthen tication; | |||||
| 144 | } | 144 | } | 144 | } | |||||
| 145 | 145 | 145 | ||||||||
| 146 | 146 | 146 | ||||||||
| 147 | /** | 147 | /** | 147 | /** | |||||
| 148 | * Set s whether each reque st needs t o be reaut henticated (by an | 148 | * Set s whether each reque st needs t o be reaut henticated (by an | 148 | * Set s whether each reque st needs t o be reaut henticated (by an | |||||
| 149 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | 149 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | 149 | * Aut henticator downstrea m in the p ipeline) t o the secu rity | |||||
| 150 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | 150 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | 150 | * <co de>Realm</ code>, or if this Va lve can it self bind security i nfo | |||||
| 151 | * to the reques t, based o n the pres ence of a valid SSO entry, wit hout | 151 | * to the reques t, based o n the pres ence of a valid SSO entry, wit hout | 151 | * to the reques t, based o n the pres ence of a valid SSO entry, wit hout | |||||
| 152 | * rec hecking wi th the <co de>Realm</ code>. | 152 | * rec hecking wi th the <co de>Realm</ code>. | 152 | * rec hecking wi th the <co de>Realm</ code>. | |||||
| 153 | * <p> | 153 | * <p> | 153 | * <p> | |||||
| 154 | * If this prope rty is <co de>false</ code> (the default), this | 154 | * If this prope rty is <co de>false</ code> (the default), this | 154 | * If this prope rty is <co de>false</ code> (the default), this | |||||
| 155 | * <co de>Valve</ code> will bind a Us erPrincipa l and Auth Type to th e request | 155 | * <co de>Valve</ code> will bind a Us erPrincipa l and Auth Type to th e request | 155 | * <co de>Valve</ code> will bind a Us erPrincipa l and Auth Type to th e request | |||||
| 156 | * if a valid SS O entry is associate d with the request. It will n ot notify | 156 | * if a valid SS O entry is associate d with the request. It will n ot notify | 156 | * if a valid SS O entry is associate d with the request. It will n ot notify | |||||
| 157 | * the security <code>Real m</code> o f the inco ming reque st. | 157 | * the security <code>Real m</code> o f the inco ming reque st. | 157 | * the security <code>Real m</code> o f the inco ming reque st. | |||||
| 158 | * <p> | 158 | * <p> | 158 | * <p> | |||||
| 159 | * Thi s property should be set to <c ode>true</ code> if t he overall server | 159 | * Thi s property should be set to <c ode>true</ code> if t he overall server | 159 | * Thi s property should be set to <c ode>true</ code> if t he overall server | |||||
| 160 | * con figuration requires that the < code>Realm </code> re authentica te each | 160 | * con figuration requires that the < code>Realm </code> re authentica te each | 160 | * con figuration requires that the < code>Realm </code> re authentica te each | |||||
| 161 | * req uest threa d. An exa mple of su ch a confi guration w ould be on e where | 161 | * req uest threa d. An exa mple of su ch a confi guration w ould be on e where | 161 | * req uest threa d. An exa mple of su ch a confi guration w ould be on e where | |||||
| 162 | * the <code>Rea lm</code> implementa tion provi des securi ty for bot h a | 162 | * the <code>Rea lm</code> implementa tion provi des securi ty for bot h a | 162 | * the <code>Rea lm</code> implementa tion provi des securi ty for bot h a | |||||
| 163 | * web tier and an associa ted EJB ti er, and ne eds to set security | 163 | * web tier and an associa ted EJB ti er, and ne eds to set security | 163 | * web tier and an associa ted EJB ti er, and ne eds to set security | |||||
| 164 | * cre dentials o n each req uest threa d in order to suppor t EJB acce ss. | 164 | * cre dentials o n each req uest threa d in order to suppor t EJB acce ss. | 164 | * cre dentials o n each req uest threa d in order to suppor t EJB acce ss. | |||||
| 165 | * <p> | 165 | * <p> | 165 | * <p> | |||||
| 166 | * If this prope rty is set to <code> true</code >, this Va lve will s et flags | 166 | * If this prope rty is set to <code> true</code >, this Va lve will s et flags | 166 | * If this prope rty is set to <code> true</code >, this Va lve will s et flags | |||||
| 167 | * on the reques t notifyin g the down stream Aut henticator that the request | 167 | * on the reques t notifyin g the down stream Aut henticator that the request | 167 | * on the reques t notifyin g the down stream Aut henticator that the request | |||||
| 168 | * is associated with an S SO session . The Aut henticator will then call its | 168 | * is associated with an S SO session . The Aut henticator will then call its | 168 | * is associated with an S SO session . The Aut henticator will then call its | |||||
| 169 | * {@l ink Authen ticatorBas e#reauthen ticateFrom SSO reauth enticateFr omSSO} | 169 | * {@l ink Authen ticatorBas e#reauthen ticateFrom SSO reauth enticateFr omSSO} | 169 | * {@l ink Authen ticatorBas e#reauthen ticateFrom SSO reauth enticateFr omSSO} | |||||
| 170 | * met hod to att empt to re authentica te the req uest to th e | 170 | * met hod to att empt to re authentica te the req uest to th e | 170 | * met hod to att empt to re authentica te the req uest to th e | |||||
| 171 | * <co de>Realm</ code>, usi ng any cre dentials t hat were c ached with this | 171 | * <co de>Realm</ code>, usi ng any cre dentials t hat were c ached with this | 171 | * <co de>Realm</ code>, usi ng any cre dentials t hat were c ached with this | |||||
| 172 | * Val ve. | 172 | * Val ve. | 172 | * Val ve. | |||||
| 173 | * <p> | 173 | * <p> | 173 | * <p> | |||||
| 174 | * The default v alue of th is propert y is <code >false</co de>, in or der | 174 | * The default v alue of th is propert y is <code >false</co de>, in or der | 174 | * The default v alue of th is propert y is <code >false</co de>, in or der | |||||
| 175 | * to maintain b ackward co mpatibilit y with pre vious vers ions of To mcat. | 175 | * to maintain b ackward co mpatibilit y with pre vious vers ions of To mcat. | 175 | * to maintain b ackward co mpatibilit y with pre vious vers ions of To mcat. | |||||
| 176 | * | 176 | * | 176 | * | |||||
| 177 | * @pa ram requir ed <code> true</code > if it is required that a dow nstream | 177 | * @pa ram requir ed <code> true</code > if it is required that a dow nstream | 177 | * @pa ram requir ed <code> true</code > if it is required that a dow nstream | |||||
| 178 | * Authen ticator re authentica te each re quest befo re calls | 178 | * Authen ticator re authentica te each re quest befo re calls | 178 | * Authen ticator re authentica te each re quest befo re calls | |||||
| 179 | * to <c ode>HttpSe rvletReque st.setUser Principal( )</code> | 179 | * to <c ode>HttpSe rvletReque st.setUser Principal( )</code> | 179 | * to <c ode>HttpSe rvletReque st.setUser Principal( )</code> | |||||
| 180 | * and <c ode>HttpSe rvletReque st.setAuth Type()</co de> are | 180 | * and <c ode>HttpSe rvletReque st.setAuth Type()</co de> are | 180 | * and <c ode>HttpSe rvletReque st.setAuth Type()</co de> are | |||||
| 181 | * made; <code>fals e</code> i f the <cod e>Valve</c ode> can | 181 | * made; <code>fals e</code> i f the <cod e>Valve</c ode> can | 181 | * made; <code>fals e</code> i f the <cod e>Valve</c ode> can | |||||
| 182 | * itself make thos e calls re lying on t he presenc e of a | 182 | * itself make thos e calls re lying on t he presenc e of a | 182 | * itself make thos e calls re lying on t he presenc e of a | |||||
| 183 | * valid SingleSign On entry a ssociated with the r equest. | 183 | * valid SingleSign On entry a ssociated with the r equest. | 183 | * valid SingleSign On entry a ssociated with the r equest. | |||||
| 184 | * | 184 | * | 184 | * | |||||
| 185 | * @se e Authenti catorBase# reauthenti cateFromSS O | 185 | * @se e Authenti catorBase# reauthenti cateFromSS O | 185 | * @se e Authenti catorBase# reauthenti cateFromSS O | |||||
| 186 | */ | 186 | */ | 186 | */ | |||||
| 187 | public void setR equireReau thenticati on(boolean required) { | 187 | public void setR equireReau thenticati on(boolean required) { | 187 | public void setR equireReau thenticati on(boolean required) { | |||||
| 188 | th is.require Reauthenti cation = r equired; | 188 | th is.require Reauthenti cation = r equired; | 188 | th is.require Reauthenti cation = r equired; | |||||
| 189 | } | 189 | } | 189 | } | |||||
| 190 | 190 | 190 | ||||||||
| 191 | 191 | 191 | ||||||||
| 192 | // --- ---------- ---------- ---------- ---------- ---------- ----- Valv e Methods | 192 | // --- ---------- ---------- ---------- ---------- ---------- ----- Valv e Methods | 192 | // --- ---------- ---------- ---------- ---------- ---------- ----- Valv e Methods | |||||
| 193 | 193 | 193 | ||||||||
| 194 | /** | 194 | /** | 194 | /** | |||||
| 195 | * Per form singl e-sign-on support pr ocessing f or this re quest. | 195 | * Per form singl e-sign-on support pr ocessing f or this re quest. | 195 | * Per form singl e-sign-on support pr ocessing f or this re quest. | |||||
| 196 | * | 196 | * | 196 | * | |||||
| 197 | * @pa ram reques t The serv let reques t we are p rocessing | 197 | * @pa ram reques t The serv let reques t we are p rocessing | 197 | * @pa ram reques t The serv let reques t we are p rocessing | |||||
| 198 | * @pa ram respon se The ser vlet respo nse we are creating | 198 | * @pa ram respon se The ser vlet respo nse we are creating | 198 | * @pa ram respon se The ser vlet respo nse we are creating | |||||
| 199 | * | 199 | * | 199 | * | |||||
| 200 | * @ex ception IO Exception if an inpu t/output e rror occur s | 200 | * @ex ception IO Exception if an inpu t/output e rror occur s | 200 | * @ex ception IO Exception if an inpu t/output e rror occur s | |||||
| 201 | * @ex ception Se rvletExcep tion if a servlet er ror occurs | 201 | * @ex ception Se rvletExcep tion if a servlet er ror occurs | 201 | * @ex ception Se rvletExcep tion if a servlet er ror occurs | |||||
| 202 | */ | 202 | */ | 202 | */ | |||||
| 203 | @Overr ide | 203 | @Overr ide | 203 | @Overr ide | |||||
| 204 | public void invo ke(Request request, Response r esponse) | 204 | public void invo ke(Request request, Response r esponse) | 204 | public void invo ke(Request request, Response r esponse) | |||||
| 205 | th rows IOExc eption, Se rvletExcep tion { | 205 | th rows IOExc eption, Se rvletExcep tion { | 205 | th rows IOExc eption, Se rvletExcep tion { | |||||
| 206 | 206 | 206 | ||||||||
| 207 | re quest.remo veNote(Con stants.REQ _SSOID_NOT E); | 207 | re quest.remo veNote(Con stants.REQ _SSOID_NOT E); | 207 | re quest.remo veNote(Con stants.REQ _SSOID_NOT E); | |||||
| 208 | 208 | 208 | ||||||||
| 209 | // Has a val id user al ready been authentic ated? | 209 | // Has a val id user al ready been authentic ated? | 209 | // Has a val id user al ready been authentic ated? | |||||
| 210 | if (containe rLog.isDeb ugEnabled( )) { | 210 | if (containe rLog.isDeb ugEnabled( )) { | 210 | if (containe rLog.isDeb ugEnabled( )) { | |||||
| 211 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.invoke ", request .getReques tURI())); | 211 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.invoke ", request .getReques tURI())); | 211 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.invoke ", request .getReques tURI())); | |||||
| 212 | } | 212 | } | 212 | } | |||||
| 213 | if (request. getUserPri ncipal() ! = null) { | 213 | if (request. getUserPri ncipal() ! = null) { | 213 | if (request. getUserPri ncipal() ! = null) { | |||||
| 214 | if (cont ainerLog.i sDebugEnab led()) { | 214 | if (cont ainerLog.i sDebugEnab led()) { | 214 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 215 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.ha sPrincipal ", | 215 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.ha sPrincipal ", | 215 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.ha sPrincipal ", | |||||
| 216 | reques t.getUserP rincipal() .getName() )); | 216 | reques t.getUserP rincipal() .getName() )); | 216 | reques t.getUserP rincipal() .getName() )); | |||||
| 217 | } | 217 | } | 217 | } | |||||
| 218 | getNext( ).invoke(r equest, re sponse); | 218 | getNext( ).invoke(r equest, re sponse); | 218 | getNext( ).invoke(r equest, re sponse); | |||||
| 219 | return; | 219 | return; | 219 | return; | |||||
| 220 | } | 220 | } | 220 | } | |||||
| 221 | 221 | 221 | ||||||||
| 222 | // Check for the singl e sign on cookie | 222 | // Check for the singl e sign on cookie | 222 | // Check for the singl e sign on cookie | |||||
| 223 | if (containe rLog.isDeb ugEnabled( )) { | 223 | if (containe rLog.isDeb ugEnabled( )) { | 223 | if (containe rLog.isDeb ugEnabled( )) { | |||||
| 224 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.cookie Check")); | 224 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.cookie Check")); | 224 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.cookie Check")); | |||||
| 225 | } | 225 | } | 225 | } | |||||
| 226 | Co okie cooki e = null; | 226 | Co okie cooki e = null; | 226 | Co okie cooki e = null; | |||||
| 227 | Co okie cooki es[] = req uest.getCo okies(); | 227 | Co okie cooki es[] = req uest.getCo okies(); | 227 | Co okie cooki es[] = req uest.getCo okies(); | |||||
| 228 | if (cookies != null) { | 228 | if (cookies != null) { | 228 | if (cookies != null) { | |||||
| 229 | for (int i = 0; i < cookies. length; i+ +) { | 229 | for (int i = 0; i < cookies. length; i+ +) { | 229 | for (int i = 0; i < cookies. length; i+ +) { | |||||
| 230 | if ( Constants. SINGLE_SIG N_ON_COOKI E.equals(c ookies[i]. getName()) ) { | 230 | if ( Constants. SINGLE_SIG N_ON_COOKI E.equals(c ookies[i]. getName()) ) { | 230 | if ( Constants. SINGLE_SIG N_ON_COOKI E.equals(c ookies[i]. getName()) ) { | |||||
| 231 | cookie = c ookies[i]; | 231 | cookie = c ookies[i]; | 231 | cookie = c ookies[i]; | |||||
| 232 | break; | 232 | break; | 232 | break; | |||||
| 233 | } | 233 | } | 233 | } | |||||
| 234 | } | 234 | } | 234 | } | |||||
| 235 | } | 235 | } | 235 | } | |||||
| 236 | if (cookie = = null) { | 236 | if (cookie = = null) { | 236 | if (cookie = = null) { | |||||
| 237 | if (cont ainerLog.i sDebugEnab led()) { | 237 | if (cont ainerLog.i sDebugEnab led()) { | 237 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 238 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.co okieNotFou nd")); | 238 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.co okieNotFou nd")); | 238 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.co okieNotFou nd")); | |||||
| 239 | } | 239 | } | 239 | } | |||||
| 240 | getNext( ).invoke(r equest, re sponse); | 240 | getNext( ).invoke(r equest, re sponse); | 240 | getNext( ).invoke(r equest, re sponse); | |||||
| 241 | return; | 241 | return; | 241 | return; | |||||
| 242 | } | 242 | } | 242 | } | |||||
| 243 | 243 | 243 | ||||||||
| 244 | // Look up t he cached Principal associated with this cookie va lue | 244 | // Look up t he cached Principal associated with this cookie va lue | 244 | // Look up t he cached Principal associated with this cookie va lue | |||||
| 245 | if (containe rLog.isDeb ugEnabled( )) { | 245 | if (containe rLog.isDeb ugEnabled( )) { | 245 | if (containe rLog.isDeb ugEnabled( )) { | |||||
| 246 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.princi palCheck", | 246 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.princi palCheck", | 246 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.princi palCheck", | |||||
| 247 | cookie.get Value())); | 247 | cookie.get Value())); | 247 | cookie.get Value())); | |||||
| 248 | } | 248 | } | 248 | } | |||||
| 249 | Si ngleSignOn Entry entr y = cache. get(cookie .getValue( )); | 249 | Si ngleSignOn Entry entr y = cache. get(cookie .getValue( )); | 249 | Si ngleSignOn Entry entr y = cache. get(cookie .getValue( )); | |||||
| 250 | if (entry != null) { | 250 | if (entry != null) { | 250 | if (entry != null) { | |||||
| 251 | if (cont ainerLog.i sDebugEnab led()) { | 251 | if (cont ainerLog.i sDebugEnab led()) { | 251 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 252 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalFou nd", | 252 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalFou nd", | 252 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalFou nd", | |||||
| 253 | entry. getPrincip al() != nu ll ? entry .getPrinci pal().getN ame() : "" , | 253 | entry. getPrincip al() != nu ll ? entry .getPrinci pal().getN ame() : "" , | 253 | entry. getPrincip al() != nu ll ? entry .getPrinci pal().getN ame() : "" , | |||||
| 254 | entry. getAuthTyp e())); | 254 | entry. getAuthTyp e())); | 254 | entry. getAuthTyp e())); | |||||
| 255 | } | 255 | } | 255 | } | |||||
| 256 | request. setNote(Co nstants.RE Q_SSOID_NO TE, cookie .getValue( )); | 256 | request. setNote(Co nstants.RE Q_SSOID_NO TE, cookie .getValue( )); | 256 | request. setNote(Co nstants.RE Q_SSOID_NO TE, cookie .getValue( )); | |||||
| 257 | // Only set securi ty element s if reaut henticatio n is not r equired | 257 | // Only set securi ty element s if reaut henticatio n is not r equired | 257 | // Only set securi ty element s if reaut henticatio n is not r equired | |||||
| 258 | if (!get RequireRea uthenticat ion()) { | 258 | if (!get RequireRea uthenticat ion()) { | 258 | if (!get RequireRea uthenticat ion()) { | |||||
| 259 | requ est.setAut hType(entr y.getAuthT ype()); | 259 | requ est.setAut hType(entr y.getAuthT ype()); | 259 | requ est.setAut hType(entr y.getAuthT ype()); | |||||
| 260 | requ est.setUse rPrincipal (entry.get Principal( )); | 260 | requ est.setUse rPrincipal (entry.get Principal( )); | 260 | requ est.setUse rPrincipal (entry.get Principal( )); | |||||
| 261 | } | 261 | } | 261 | } | |||||
| 262 | } else { | 262 | } else { | 262 | } else { | |||||
| 263 | if (cont ainerLog.i sDebugEnab led()) { | 263 | if (cont ainerLog.i sDebugEnab led()) { | 263 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 264 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalNot Found", | 264 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalNot Found", | 264 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.pr incipalNot Found", | |||||
| 265 | cookie .getValue( ))); | 265 | cookie .getValue( ))); | 265 | cookie .getValue( ))); | |||||
| 266 | } | 266 | } | 266 | } | |||||
| 267 | // No ne ed to retu rn a valid SSO sessi on ID | 267 | // No ne ed to retu rn a valid SSO sessi on ID | 267 | // No ne ed to retu rn a valid SSO sessi on ID | |||||
| 268 | cookie.s etValue("R EMOVE"); | 268 | cookie.s etValue("R EMOVE"); | 268 | cookie.s etValue("R EMOVE"); | |||||
| 269 | // Age o f zero wil l trigger removal | 269 | // Age o f zero wil l trigger removal | 269 | // Age o f zero wil l trigger removal | |||||
| 270 | cookie.s etMaxAge(0 ); | 270 | cookie.s etMaxAge(0 ); | 270 | cookie.s etMaxAge(0 ); | |||||
| 271 | // Domai n and path have to m atch the o riginal co okie to 'r eplace' | 271 | // Domai n and path have to m atch the o riginal co okie to 'r eplace' | 271 | // Domai n and path have to m atch the o riginal co okie to 'r eplace' | |||||
| 272 | // the o riginal co okie | 272 | // the o riginal co okie | 272 | // the o riginal co okie | |||||
| 273 | cookie.s etPath("/" ); | 273 | cookie.s etPath("/" ); | 273 | cookie.s etPath("/" ); | |||||
| 274 | String d omain = ge tCookieDom ain(); | 274 | String d omain = ge tCookieDom ain(); | 274 | String d omain = ge tCookieDom ain(); | |||||
| 275 | if (doma in != null ) { | 275 | if (doma in != null ) { | 275 | if (doma in != null ) { | |||||
| 276 | cook ie.setDoma in(domain) ; | 276 | cook ie.setDoma in(domain) ; | 276 | cook ie.setDoma in(domain) ; | |||||
| 277 | } | 277 | } | 277 | } | |||||
| 278 | // This is going t o trigger a Set-Cook ie header. While the value is | 278 | // This is going t o trigger a Set-Cook ie header. While the value is | 278 | // This is going t o trigger a Set-Cook ie header. While the value is | |||||
| 279 | // not s ecurity se nsitive, e nsure that expectati ons for se cure and | 279 | // not s ecurity se nsitive, e nsure that expectati ons for se cure and | 279 | // not s ecurity se nsitive, e nsure that expectati ons for se cure and | |||||
| 280 | // httpO nly are me t | 280 | // httpO nly are me t | 280 | // httpO nly are me t | |||||
| 281 | cookie.s etSecure(r equest.isS ecure()); | 281 | cookie.s etSecure(r equest.isS ecure()); | 281 | cookie.s etSecure(r equest.isS ecure()); | |||||
| 282 | if (requ est.getSer vletContex t().getSes sionCookie Config().i sHttpOnly( ) || | 282 | if (requ est.getSer vletContex t().getSes sionCookie Config().i sHttpOnly( ) || | 282 | if (requ est.getSer vletContex t().getSes sionCookie Config().i sHttpOnly( ) || | |||||
| 283 | request.ge tContext() .getUseHtt pOnly()) { | 283 | request.ge tContext() .getUseHtt pOnly()) { | 283 | request.ge tContext() .getUseHtt pOnly()) { | |||||
| 284 | cook ie.setHttp Only(true) ; | 284 | cook ie.setHttp Only(true) ; | 284 | cook ie.setHttp Only(true) ; | |||||
| 285 | } | 285 | } | 285 | } | |||||
| 286 | 286 | 286 | ||||||||
| 287 | response .addCookie (cookie); | 287 | response .addCookie (cookie); | 287 | response .addCookie (cookie); | |||||
| 288 | } | 288 | } | 288 | } | |||||
| 289 | 289 | 289 | ||||||||
| 290 | // Invoke th e next Val ve in our pipeline | 290 | // Invoke th e next Val ve in our pipeline | 290 | // Invoke th e next Val ve in our pipeline | |||||
| 291 | ge tNext().in voke(reque st, respon se); | 291 | ge tNext().in voke(reque st, respon se); | 291 | ge tNext().in voke(reque st, respon se); | |||||
| 292 | } | 292 | } | 292 | } | |||||
| 293 | 293 | 293 | ||||||||
| 294 | 294 | 294 | ||||||||
| 295 | // --- ---------- ---------- ---------- ---------- ---------- - Protecte d Methods | 295 | // --- ---------- ---------- ---------- ---------- ---------- - Protecte d Methods | 295 | // --- ---------- ---------- ---------- ---------- ---------- - Protecte d Methods | |||||
| 296 | 296 | 296 | ||||||||
| 297 | /** | 297 | /** | 297 | /** | |||||
| 298 | * Pro cess a ses sion destr oyed event by removi ng referen ces to tha t session | 298 | * Pro cess a ses sion destr oyed event by removi ng referen ces to tha t session | 298 | * Pro cess a ses sion destr oyed event by removi ng referen ces to tha t session | |||||
| 299 | * fro m the cach es and - i f the sess ion destru ction is t he result of a | 299 | * fro m the cach es and - i f the sess ion destru ction is t he result of a | 299 | * fro m the cach es and - i f the sess ion destru ction is t he result of a | |||||
| 300 | * log out - dest roy the as sociated S SO session . | 300 | * log out - dest roy the as sociated S SO session . | 300 | * log out - dest roy the as sociated S SO session . | |||||
| 301 | * | 301 | * | 301 | * | |||||
| 302 | * @pa ram ssoId The ID o f the SSO session wh ich which the destro yed | 302 | * @pa ram ssoId The ID o f the SSO session wh ich which the destro yed | 302 | * @pa ram ssoId The ID o f the SSO session wh ich which the destro yed | |||||
| 303 | * session was associ ated | 303 | * session was associ ated | 303 | * session was associ ated | |||||
| 304 | * @pa ram sessio n The sess ion that h as been de stroyed | 304 | * @pa ram sessio n The sess ion that h as been de stroyed | 304 | * @pa ram sessio n The sess ion that h as been de stroyed | |||||
| 305 | */ | 305 | */ | 305 | */ | |||||
| 306 | public void sess ionDestroy ed(String ssoId, Ses sion sessi on) { | 306 | public void sess ionDestroy ed(String ssoId, Ses sion sessi on) { | 306 | public void sess ionDestroy ed(String ssoId, Ses sion sessi on) { | |||||
| 307 | 307 | 307 | ||||||||
| 308 | if (!getStat e().isAvai lable()) { | 308 | if (!getStat e().isAvai lable()) { | 308 | if (!getStat e().isAvai lable()) { | |||||
| 309 | return; | 309 | return; | 309 | return; | |||||
| 310 | } | 310 | } | 310 | } | |||||
| 311 | 311 | 311 | ||||||||
| 312 | // Was the s ession des troyed as the result of a time out or con text stop? | 312 | // Was the s ession des troyed as the result of a time out or con text stop? | 312 | // Was the s ession des troyed as the result of a time out or con text stop? | |||||
| 313 | // If so, we 'll just r emove the expired se ssion from the SSO. If the | 313 | // If so, we 'll just r emove the expired se ssion from the SSO. If the | 313 | // If so, we 'll just r emove the expired se ssion from the SSO. If the | |||||
| 314 | // session w as logged out, we'll log out o f all sess ion associ ated with | 314 | // session w as logged out, we'll log out o f all sess ion associ ated with | 314 | // session w as logged out, we'll log out o f all sess ion associ ated with | |||||
| 315 | // the SSO. | 315 | // the SSO. | 315 | // the SSO. | |||||
| 316 | if (((sessio n.getMaxIn activeInte rval() > 0 ) | 316 | if (((sessio n.getMaxIn activeInte rval() > 0 ) | 316 | if (((sessio n.getMaxIn activeInte rval() > 0 ) | |||||
| 317 | && (sess ion.getIdl eTimeInter nal() >= s ession.get MaxInactiv eInterval( ) * 1000)) | 317 | && (sess ion.getIdl eTimeInter nal() >= s ession.get MaxInactiv eInterval( ) * 1000)) | 317 | && (sess ion.getIdl eTimeInter nal() >= s ession.get MaxInactiv eInterval( ) * 1000)) | |||||
| 318 | || (!ses sion.getMa nager().ge tContext() .getState( ).isAvaila ble())) { | 318 | || (!ses sion.getMa nager().ge tContext() .getState( ).isAvaila ble())) { | 318 | || (!ses sion.getMa nager().ge tContext() .getState( ).isAvaila ble())) { | |||||
| 319 | if (cont ainerLog.i sDebugEnab led()) { | 319 | if (cont ainerLog.i sDebugEnab led()) { | 319 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 320 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionTimeo ut", | 320 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionTimeo ut", | 320 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionTimeo ut", | |||||
| 321 | ssoId, session)) ; | 321 | ssoId, session)) ; | 321 | ssoId, session)) ; | |||||
| 322 | } | 322 | } | 322 | } | |||||
| 323 | removeSe ssion(ssoI d, session ); | 323 | removeSe ssion(ssoI d, session ); | 323 | removeSe ssion(ssoI d, session ); | |||||
| 324 | } else { | 324 | } else { | 324 | } else { | |||||
| 325 | // The s ession was logged ou t. | 325 | // The s ession was logged ou t. | 325 | // The s ession was logged ou t. | |||||
| 326 | // Dereg ister this single se ssion id, invalidati ng | 326 | // Dereg ister this single se ssion id, invalidati ng | 326 | // Dereg ister this single se ssion id, invalidati ng | |||||
| 327 | // assoc iated sess ions | 327 | // assoc iated sess ions | 327 | // assoc iated sess ions | |||||
| 328 | if (cont ainerLog.i sDebugEnab led()) { | 328 | if (cont ainerLog.i sDebugEnab led()) { | 328 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 329 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionLogou t", | 329 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionLogou t", | 329 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.se ssionLogou t", | |||||
| 330 | ssoId, session)) ; | 330 | ssoId, session)) ; | 330 | ssoId, session)) ; | |||||
| 331 | } | 331 | } | 331 | } | |||||
| 332 | // First remove th e session that we kn ow has exp ired / bee n logged | 332 | // First remove th e session that we kn ow has exp ired / bee n logged | 332 | // First remove th e session that we kn ow has exp ired / bee n logged | |||||
| 333 | // out s ince it ha s already been remov ed from it s Manager and, if | 333 | // out s ince it ha s already been remov ed from it s Manager and, if | 333 | // out s ince it ha s already been remov ed from it s Manager and, if | |||||
| 334 | // we do n't remove it first, deregiste r() will l og a warni ng that it | 334 | // we do n't remove it first, deregiste r() will l og a warni ng that it | 334 | // we do n't remove it first, deregiste r() will l og a warni ng that it | |||||
| 335 | // can't be found | 335 | // can't be found | 335 | // can't be found | |||||
| 336 | removeSe ssion(ssoI d, session ); | 336 | removeSe ssion(ssoI d, session ); | 336 | removeSe ssion(ssoI d, session ); | |||||
| 337 | // If th e SSO sess ion was on ly associa ted with o ne web app the call | 337 | // If th e SSO sess ion was on ly associa ted with o ne web app the call | 337 | // If th e SSO sess ion was on ly associa ted with o ne web app the call | |||||
| 338 | // above will have removed t he SSO ses sion from the cache | 338 | // above will have removed t he SSO ses sion from the cache | 338 | // above will have removed t he SSO ses sion from the cache | |||||
| 339 | if (cach e.contains Key(ssoId) ) { | 339 | if (cach e.contains Key(ssoId) ) { | 339 | if (cach e.contains Key(ssoId) ) { | |||||
| 340 | dere gister(sso Id); | 340 | dere gister(sso Id); | 340 | dere gister(sso Id); | |||||
| 341 | } | 341 | } | 341 | } | |||||
| 342 | } | 342 | } | 342 | } | |||||
| 343 | } | 343 | } | 343 | } | |||||
| 344 | 344 | 344 | ||||||||
| 345 | 345 | 345 | ||||||||
| 346 | /** | 346 | /** | 346 | /** | |||||
| 347 | * Ass ociate the specified single si gn on iden tifier wit h the | 347 | * Ass ociate the specified single si gn on iden tifier wit h the | 347 | * Ass ociate the specified single si gn on iden tifier wit h the | |||||
| 348 | * spe cified Ses sion. | 348 | * spe cified Ses sion. | 348 | * spe cified Ses sion. | |||||
| 349 | * | 349 | * | 349 | * | |||||
| 350 | * @pa ram ssoId Single sig n on ident ifier | 350 | * @pa ram ssoId Single sig n on ident ifier | 350 | * @pa ram ssoId Single sig n on ident ifier | |||||
| 351 | * @pa ram sessio n Session to be asso ciated | 351 | * @pa ram sessio n Session to be asso ciated | 351 | * @pa ram sessio n Session to be asso ciated | |||||
| 352 | * | 352 | * | 352 | * | |||||
| 353 | * @re turn <code >true</cod e> if the session wa s associat ed to the given SSO | 353 | * @re turn <code >true</cod e> if the session wa s associat ed to the given SSO | 353 | * @re turn <code >true</cod e> if the session wa s associat ed to the given SSO | |||||
| 354 | * sessi on, otherw ise <code> false</cod e> | 354 | * sessi on, otherw ise <code> false</cod e> | 354 | * sessi on, otherw ise <code> false</cod e> | |||||
| 355 | */ | 355 | */ | 355 | */ | |||||
| 356 | protec ted boolea n associat e(String s soId, Sess ion sessio n) { | 356 | protec ted boolea n associat e(String s soId, Sess ion sessio n) { | 356 | protec ted boolea n associat e(String s soId, Sess ion sessio n) { | |||||
| 357 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | 357 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | 357 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | |||||
| 358 | if (sso == n ull) { | 358 | if (sso == n ull) { | 358 | if (sso == n ull) { | |||||
| 359 | if (cont ainerLog.i sDebugEnab led()) { | 359 | if (cont ainerLog.i sDebugEnab led()) { | 359 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 360 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociateFai l", | 360 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociateFai l", | 360 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociateFai l", | |||||
| 361 | ssoId, session)) ; | 361 | ssoId, session)) ; | 361 | ssoId, session)) ; | |||||
| 362 | } | 362 | } | 362 | } | |||||
| 363 | return f alse; | 363 | return f alse; | 363 | return f alse; | |||||
| 364 | } else { | 364 | } else { | 364 | } else { | |||||
| 365 | if (cont ainerLog.i sDebugEnab led()) { | 365 | if (cont ainerLog.i sDebugEnab led()) { | 365 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 366 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociate", | 366 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociate", | 366 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.as sociate", | |||||
| 367 | ssoId, session)) ; | 367 | ssoId, session)) ; | 367 | ssoId, session)) ; | |||||
| 368 | } | 368 | } | 368 | } | |||||
| 369 | sso.addS ession(thi s, ssoId, session); | 369 | sso.addS ession(thi s, ssoId, session); | 369 | sso.addS ession(thi s, ssoId, session); | |||||
| 370 | return t rue; | 370 | return t rue; | 370 | return t rue; | |||||
| 371 | } | 371 | } | 371 | } | |||||
| 372 | } | 372 | } | 372 | } | |||||
| 373 | 373 | 373 | ||||||||
| 374 | 374 | 374 | ||||||||
| 375 | /** | 375 | /** | 375 | /** | |||||
| 376 | * Der egister th e specifie d single s ign on ide ntifier, a nd invalid ate | 376 | * Der egister th e specifie d single s ign on ide ntifier, a nd invalid ate | 376 | * Der egister th e specifie d single s ign on ide ntifier, a nd invalid ate | |||||
| 377 | * any associate d sessions . | 377 | * any associate d sessions . | 377 | * any associate d sessions . | |||||
| 378 | * | 378 | * | 378 | * | |||||
| 379 | * @pa ram ssoId Single sig n on ident ifier to d eregister | 379 | * @pa ram ssoId Single sig n on ident ifier to d eregister | 379 | * @pa ram ssoId Single sig n on ident ifier to d eregister | |||||
| 380 | */ | 380 | */ | 380 | */ | |||||
| 381 | protec ted void d eregister( String sso Id) { | 381 | protec ted void d eregister( String sso Id) { | 381 | protec ted void d eregister( String sso Id) { | |||||
| 382 | 382 | 382 | ||||||||
| 383 | // Look up a nd remove the corres ponding Si ngleSignOn Entry | 383 | // Look up a nd remove the corres ponding Si ngleSignOn Entry | 383 | // Look up a nd remove the corres ponding Si ngleSignOn Entry | |||||
| 384 | Si ngleSignOn Entry sso = cache.re move(ssoId ); | 384 | Si ngleSignOn Entry sso = cache.re move(ssoId ); | 384 | Si ngleSignOn Entry sso = cache.re move(ssoId ); | |||||
| 385 | 385 | 385 | ||||||||
| 386 | if (sso == n ull) { | 386 | if (sso == n ull) { | 386 | if (sso == n ull) { | |||||
| 387 | if (cont ainerLog.i sDebugEnab led()) { | 387 | if (cont ainerLog.i sDebugEnab led()) { | 387 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 388 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerFa il", ssoId )); | 388 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerFa il", ssoId )); | 388 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerFa il", ssoId )); | |||||
| 389 | } | 389 | } | 389 | } | |||||
| 390 | return; | 390 | return; | 390 | return; | |||||
| 391 | } | 391 | } | 391 | } | |||||
| 392 | 392 | 392 | ||||||||
| 393 | // Expire an y associat ed session s | 393 | // Expire an y associat ed session s | 393 | // Expire an y associat ed session s | |||||
| 394 | Se t<SingleSi gnOnSessio nKey> ssoK eys = sso. findSessio ns(); | 394 | Se t<SingleSi gnOnSessio nKey> ssoK eys = sso. findSessio ns(); | 394 | Se t<SingleSi gnOnSessio nKey> ssoK eys = sso. findSessio ns(); | |||||
| 395 | if (ssoKeys. size() == 0) { | 395 | if (ssoKeys. size() == 0) { | 395 | if (ssoKeys. size() == 0) { | |||||
| 396 | if (cont ainerLog.i sDebugEnab led()) { | 396 | if (cont ainerLog.i sDebugEnab led()) { | 396 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 397 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerNo ne", ssoId )); | 397 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerNo ne", ssoId )); | 397 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de registerNo ne", ssoId )); | |||||
| 398 | } | 398 | } | 398 | } | |||||
| 399 | } | 399 | } | 399 | } | |||||
| 400 | fo r (SingleS ignOnSessi onKey ssoK ey : ssoKe ys) { | 400 | fo r (SingleS ignOnSessi onKey ssoK ey : ssoKe ys) { | 400 | fo r (SingleS ignOnSessi onKey ssoK ey : ssoKe ys) { | |||||
| 401 | if (cont ainerLog.i sDebugEnab led()) { | 401 | if (cont ainerLog.i sDebugEnab led()) { | 401 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 402 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de register", ssoKey, s soId)); | 402 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de register", ssoKey, s soId)); | 402 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.de register", ssoKey, s soId)); | |||||
| 403 | } | 403 | } | 403 | } | |||||
| 404 | // Inval idate this session | 404 | // Inval idate this session | 404 | // Inval idate this session | |||||
| 405 | expire(s soKey); | 405 | expire(s soKey); | 405 | expire(s soKey); | |||||
| 406 | } | 406 | } | 406 | } | |||||
| 407 | 407 | 407 | ||||||||
| 408 | // NOTE: Cl ients may still poss ess the ol d single s ign on coo kie, | 408 | // NOTE: Cl ients may still poss ess the ol d single s ign on coo kie, | 408 | // NOTE: Cl ients may still poss ess the ol d single s ign on coo kie, | |||||
| 409 | // but it wi ll be remo ved on the next requ est since it is no l onger | 409 | // but it wi ll be remo ved on the next requ est since it is no l onger | 409 | // but it wi ll be remo ved on the next requ est since it is no l onger | |||||
| 410 | // in the ca che | 410 | // in the ca che | 410 | // in the ca che | |||||
| 411 | } | 411 | } | 411 | } | |||||
| 412 | 412 | 412 | ||||||||
| 413 | 413 | 413 | ||||||||
| 414 | privat e void exp ire(Single SignOnSess ionKey key ) { | 414 | privat e void exp ire(Single SignOnSess ionKey key ) { | 414 | privat e void exp ire(Single SignOnSess ionKey key ) { | |||||
| 415 | if (engine = = null) { | 415 | if (engine = = null) { | 415 | if (engine = = null) { | |||||
| 416 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .engineNul l", key)); | 416 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .engineNul l", key)); | 416 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .engineNul l", key)); | |||||
| 417 | return; | 417 | return; | 417 | return; | |||||
| 418 | } | 418 | } | 418 | } | |||||
| 419 | Co ntainer ho st = engin e.findChil d(key.getH ostName()) ; | 419 | Co ntainer ho st = engin e.findChil d(key.getH ostName()) ; | 419 | Co ntainer ho st = engin e.findChil d(key.getH ostName()) ; | |||||
| 420 | if (host == null) { | 420 | if (host == null) { | 420 | if (host == null) { | |||||
| 421 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .hostNotFo und", key) ); | 421 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .hostNotFo und", key) ); | 421 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .hostNotFo und", key) ); | |||||
| 422 | return; | 422 | return; | 422 | return; | |||||
| 423 | } | 423 | } | 423 | } | |||||
| 424 | Co ntext cont ext = (Con text) host .findChild (key.getCo ntextName( )); | 424 | Co ntext cont ext = (Con text) host .findChild (key.getCo ntextName( )); | 424 | Co ntext cont ext = (Con text) host .findChild (key.getCo ntextName( )); | |||||
| 425 | if (context == null) { | 425 | if (context == null) { | 425 | if (context == null) { | |||||
| 426 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .contextNo tFound", k ey)); | 426 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .contextNo tFound", k ey)); | 426 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .contextNo tFound", k ey)); | |||||
| 427 | return; | 427 | return; | 427 | return; | |||||
| 428 | } | 428 | } | 428 | } | |||||
| 429 | Ma nager mana ger = cont ext.getMan ager(); | 429 | Ma nager mana ger = cont ext.getMan ager(); | 429 | Ma nager mana ger = cont ext.getMan ager(); | |||||
| 430 | if (manager == null) { | 430 | if (manager == null) { | 430 | if (manager == null) { | |||||
| 431 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerNo tFound", k ey)); | 431 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerNo tFound", k ey)); | 431 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerNo tFound", k ey)); | |||||
| 432 | return; | 432 | return; | 432 | return; | |||||
| 433 | } | 433 | } | 433 | } | |||||
| 434 | Se ssion sess ion = null ; | 434 | Se ssion sess ion = null ; | 434 | Se ssion sess ion = null ; | |||||
| 435 | tr y { | 435 | tr y { | 435 | tr y { | |||||
| 436 | session = manager. findSessio n(key.getS essionId() ); | 436 | session = manager. findSessio n(key.getS essionId() ); | 436 | session = manager. findSessio n(key.getS essionId() ); | |||||
| 437 | } catch (IOE xception e ) { | 437 | } catch (IOE xception e ) { | 437 | } catch (IOE xception e ) { | |||||
| 438 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerEr ror", key) , e); | 438 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerEr ror", key) , e); | 438 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .managerEr ror", key) , e); | |||||
| 439 | return; | 439 | return; | 439 | return; | |||||
| 440 | } | 440 | } | 440 | } | |||||
| 441 | if (session == null) { | 441 | if (session == null) { | 441 | if (session == null) { | |||||
| 442 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .sessionNo tFound", k ey)); | 442 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .sessionNo tFound", k ey)); | 442 | containe rLog.warn( sm.getStri ng("single SignOn.ses sionExpire .sessionNo tFound", k ey)); | |||||
| 443 | return; | 443 | return; | 443 | return; | |||||
| 444 | } | 444 | } | 444 | } | |||||
| 445 | se ssion.expi re(); | 445 | se ssion.expi re(); | 445 | se ssion.expi re(); | |||||
| 446 | } | 446 | } | 446 | } | |||||
| 447 | 447 | 447 | ||||||||
| 448 | 448 | 448 | ||||||||
| 449 | /** | 449 | /** | 449 | /** | |||||
| 450 | * Att empts reau thenticati on to the given <cod e>Realm</c ode> using | 450 | * Att empts reau thenticati on to the given <cod e>Realm</c ode> using | 450 | * Att empts reau thenticati on to the given <cod e>Realm</c ode> using | |||||
| 451 | * the credentia ls associa ted with t he single sign-on se ssion | 451 | * the credentia ls associa ted with t he single sign-on se ssion | 451 | * the credentia ls associa ted with t he single sign-on se ssion | |||||
| 452 | * ide ntified by argument <code>ssoI d</code>. | 452 | * ide ntified by argument <code>ssoI d</code>. | 452 | * ide ntified by argument <code>ssoI d</code>. | |||||
| 453 | * <p> | 453 | * <p> | 453 | * <p> | |||||
| 454 | * If reauthenti cation is successful , the <cod e>Principa l</code> a nd | 454 | * If reauthenti cation is successful , the <cod e>Principa l</code> a nd | 454 | * If reauthenti cation is successful , the <cod e>Principa l</code> a nd | |||||
| 455 | * aut horization type asso ciated wit h the SSO session wi ll be boun d | 455 | * aut horization type asso ciated wit h the SSO session wi ll be boun d | 455 | * aut horization type asso ciated wit h the SSO session wi ll be boun d | |||||
| 456 | * to the given <code>Requ est</code> object vi a calls to | 456 | * to the given <code>Requ est</code> object vi a calls to | 456 | * to the given <code>Requ est</code> object vi a calls to | |||||
| 457 | * {@l ink Reques t#setAuthT ype Reques t.setAuthT ype()} and | 457 | * {@l ink Reques t#setAuthT ype Reques t.setAuthT ype()} and | 457 | * {@l ink Reques t#setAuthT ype Reques t.setAuthT ype()} and | |||||
| 458 | * {@l ink Reques t#setUserP rincipal R equest.set UserPrinci pal()} | 458 | * {@l ink Reques t#setUserP rincipal R equest.set UserPrinci pal()} | 458 | * {@l ink Reques t#setUserP rincipal R equest.set UserPrinci pal()} | |||||
| 459 | * </p > | 459 | * </p > | 459 | * </p > | |||||
| 460 | * | 460 | * | 460 | * | |||||
| 461 | * @pa ram ssoId identi fier of Si ngleSignOn session w ith which the | 461 | * @pa ram ssoId identi fier of Si ngleSignOn session w ith which the | 461 | * @pa ram ssoId identi fier of Si ngleSignOn session w ith which the | |||||
| 462 | * caller is associ ated | 462 | * caller is associ ated | 462 | * caller is associ ated | |||||
| 463 | * @pa ram realm Realm implementa tion again st which t he caller is to | 463 | * @pa ram realm Realm implementa tion again st which t he caller is to | 463 | * @pa ram realm Realm implementa tion again st which t he caller is to | |||||
| 464 | * be aut henticated | 464 | * be aut henticated | 464 | * be aut henticated | |||||
| 465 | * @pa ram reques t the re quest that needs to be authent icated | 465 | * @pa ram reques t the re quest that needs to be authent icated | 465 | * @pa ram reques t the re quest that needs to be authent icated | |||||
| 466 | * | 466 | * | 466 | * | |||||
| 467 | * @re turn <cod e>true</co de> if rea uthenticat ion was su ccessful, | 467 | * @re turn <cod e>true</co de> if rea uthenticat ion was su ccessful, | 467 | * @re turn <cod e>true</co de> if rea uthenticat ion was su ccessful, | |||||
| 468 | * <cod e>false</c ode> other wise. | 468 | * <cod e>false</c ode> other wise. | 468 | * <cod e>false</c ode> other wise. | |||||
| 469 | */ | 469 | */ | 469 | */ | |||||
| 470 | protec ted boolea n reauthen ticate(Str ing ssoId, Realm rea lm, | 470 | protec ted boolea n reauthen ticate(Str ing ssoId, Realm rea lm, | 470 | protec ted boolea n reauthen ticate(Str ing ssoId, Realm rea lm, | |||||
| 471 | Req uest reque st) { | 471 | Req uest reque st) { | 471 | Req uest reque st) { | |||||
| 472 | 472 | 472 | ||||||||
| 473 | if (ssoId == null || r ealm == nu ll) { | 473 | if (ssoId == null || r ealm == nu ll) { | 473 | if (ssoId == null || r ealm == nu ll) { | |||||
| 474 | return f alse; | 474 | return f alse; | 474 | return f alse; | |||||
| 475 | } | 475 | } | 475 | } | |||||
| 476 | 476 | 476 | ||||||||
| 477 | bo olean reau thenticate d = false; | 477 | bo olean reau thenticate d = false; | 477 | bo olean reau thenticate d = false; | |||||
| 478 | 478 | 478 | ||||||||
| 479 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | 479 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | 479 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | |||||
| 480 | if (entry != null && e ntry.getCa nReauthent icate()) { | 480 | if (entry != null && e ntry.getCa nReauthent icate()) { | 480 | if (entry != null && e ntry.getCa nReauthent icate()) { | |||||
| 481 | 481 | 481 | ||||||||
| 482 | String u sername = entry.getU sername(); | 482 | String u sername = entry.getU sername(); | 482 | String u sername = entry.getU sername(); | |||||
| 483 | if (user name != nu ll) { | 483 | if (user name != nu ll) { | 483 | if (user name != nu ll) { | |||||
| 484 | Prin cipal reau thPrincipa l = | 484 | Prin cipal reau thPrincipa l = | 484 | Prin cipal reau thPrincipa l = | |||||
| 485 | realm. authentica te(usernam e, entry.g etPassword ()); | 485 | realm. authentica te(usernam e, entry.g etPassword ()); | 485 | realm. authentica te(usernam e, entry.g etPassword ()); | |||||
| 486 | if ( reauthPrin cipal != n ull) { | 486 | if ( reauthPrin cipal != n ull) { | 486 | if ( reauthPrin cipal != n ull) { | |||||
| 487 | reauthenti cated = tr ue; | 487 | reauthenti cated = tr ue; | 487 | reauthenti cated = tr ue; | |||||
| 488 | // Bind th e authoriz ation cred entials to the reque st | 488 | // Bind th e authoriz ation cred entials to the reque st | 488 | // Bind th e authoriz ation cred entials to the reque st | |||||
| 489 | request.se tAuthType( entry.getA uthType()) ; | 489 | request.se tAuthType( entry.getA uthType()) ; | 489 | request.se tAuthType( entry.getA uthType()) ; | |||||
| 490 | request.se tUserPrinc ipal(reaut hPrincipal ); | 490 | request.se tUserPrinc ipal(reaut hPrincipal ); | 490 | request.se tUserPrinc ipal(reaut hPrincipal ); | |||||
| 491 | } | 491 | } | 491 | } | |||||
| 492 | } | 492 | } | 492 | } | |||||
| 493 | } | 493 | } | 493 | } | |||||
| 494 | 494 | 494 | ||||||||
| 495 | re turn reaut henticated ; | 495 | re turn reaut henticated ; | 495 | re turn reaut henticated ; | |||||
| 496 | } | 496 | } | 496 | } | |||||
| 497 | 497 | 497 | ||||||||
| 498 | 498 | 498 | ||||||||
| 499 | /** | 499 | /** | 499 | /** | |||||
| 500 | * Reg ister the specified Principal as being a ssociated with the s pecified | 500 | * Reg ister the specified Principal as being a ssociated with the s pecified | 500 | * Reg ister the specified Principal as being a ssociated with the s pecified | |||||
| 501 | * val ue for the single si gn on iden tifier. | 501 | * val ue for the single si gn on iden tifier. | 501 | * val ue for the single si gn on iden tifier. | |||||
| 502 | * | 502 | * | 502 | * | |||||
| 503 | * @pa ram ssoId Single sig n on ident ifier to r egister | 503 | * @pa ram ssoId Single sig n on ident ifier to r egister | 503 | * @pa ram ssoId Single sig n on ident ifier to r egister | |||||
| 504 | * @pa ram princi pal Associ ated user principal that is id entified | 504 | * @pa ram princi pal Associ ated user principal that is id entified | 504 | * @pa ram princi pal Associ ated user principal that is id entified | |||||
| 505 | * @pa ram authTy pe Authent ication ty pe used to authentic ate this | 505 | * @pa ram authTy pe Authent ication ty pe used to authentic ate this | 505 | * @pa ram authTy pe Authent ication ty pe used to authentic ate this | |||||
| 506 | * us er princip al | 506 | * us er princip al | 506 | * us er princip al | |||||
| 507 | * @pa ram userna me Usernam e used to authentica te this us er | 507 | * @pa ram userna me Usernam e used to authentica te this us er | 507 | * @pa ram userna me Usernam e used to authentica te this us er | |||||
| 508 | * @pa ram passwo rd Passwor d used to authentica te this us er | 508 | * @pa ram passwo rd Passwor d used to authentica te this us er | 508 | * @pa ram passwo rd Passwor d used to authentica te this us er | |||||
| 509 | */ | 509 | */ | 509 | */ | |||||
| 510 | protec ted void r egister(St ring ssoId , Principa l principa l, String authType, | 510 | protec ted void r egister(St ring ssoId , Principa l principa l, String authType, | 510 | protec ted void r egister(St ring ssoId , Principa l principa l, String authType, | |||||
| 511 | St ring usern ame, Strin g password ) { | 511 | St ring usern ame, Strin g password ) { | 511 | St ring usern ame, Strin g password ) { | |||||
| 512 | 512 | 512 | ||||||||
| 513 | if (containe rLog.isDeb ugEnabled( )) { | 513 | if (containe rLog.isDeb ugEnabled( )) { | 513 | if (containe rLog.isDeb ugEnabled( )) { | |||||
| 514 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.regist er", ssoId , | 514 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.regist er", ssoId , | 514 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.regist er", ssoId , | |||||
| 515 | principal != null ? principal. getName() : "", auth Type)); | 515 | principal != null ? principal. getName() : "", auth Type)); | 515 | principal != null ? principal. getName() : "", auth Type)); | |||||
| 516 | } | 516 | } | 516 | } | |||||
| 517 | 517 | 517 | ||||||||
| 518 | ca che.put(ss oId, new S ingleSignO nEntry(pri ncipal, au thType, us ername, pa ssword)); | 518 | ca che.put(ss oId, new S ingleSignO nEntry(pri ncipal, au thType, us ername, pa ssword)); | 518 | ca che.put(ss oId, new S ingleSignO nEntry(pri ncipal, au thType, us ername, pa ssword)); | |||||
| 519 | } | 519 | } | 519 | } | |||||
| 520 | 520 | 520 | ||||||||
| 521 | 521 | 521 | ||||||||
| 522 | /** | 522 | /** | 522 | /** | |||||
| 523 | * Upd ates any < code>Singl eSignOnEnt ry</code> found unde r key | 523 | * Upd ates any < code>Singl eSignOnEnt ry</code> found unde r key | 523 | * Upd ates any < code>Singl eSignOnEnt ry</code> found unde r key | |||||
| 524 | * <co de>ssoId</ code> with the given authentic ation data . | 524 | * <co de>ssoId</ code> with the given authentic ation data . | 524 | * <co de>ssoId</ code> with the given authentic ation data . | |||||
| 525 | * <p> | 525 | * <p> | 525 | * <p> | |||||
| 526 | * The purpose o f this met hod is to allow an S SO entry t hat was | 526 | * The purpose o f this met hod is to allow an S SO entry t hat was | 526 | * The purpose o f this met hod is to allow an S SO entry t hat was | |||||
| 527 | * est ablished w ithout a u sername/pa ssword com bination ( i.e. estab lished | 527 | * est ablished w ithout a u sername/pa ssword com bination ( i.e. estab lished | 527 | * est ablished w ithout a u sername/pa ssword com bination ( i.e. estab lished | |||||
| 528 | * fol lowing DIG EST or CLI ENT_CERT a uthenticat ion) to be updated w ith | 528 | * fol lowing DIG EST or CLI ENT_CERT a uthenticat ion) to be updated w ith | 528 | * fol lowing DIG EST or CLI ENT_CERT a uthenticat ion) to be updated w ith | |||||
| 529 | * a u sername an d password if one be comes avai lable thro ugh a subs equent | 529 | * a u sername an d password if one be comes avai lable thro ugh a subs equent | 529 | * a u sername an d password if one be comes avai lable thro ugh a subs equent | |||||
| 530 | * BAS IC or FORM authentic ation. Th e SSO entr y will the n be usabl e for | 530 | * BAS IC or FORM authentic ation. Th e SSO entr y will the n be usabl e for | 530 | * BAS IC or FORM authentic ation. Th e SSO entr y will the n be usabl e for | |||||
| 531 | * rea uthenticat ion. | 531 | * rea uthenticat ion. | 531 | * rea uthenticat ion. | |||||
| 532 | * <p> | 532 | * <p> | 532 | * <p> | |||||
| 533 | * <b> NOTE:</b> Only updat es the SSO entry if a call to | 533 | * <b> NOTE:</b> Only updat es the SSO entry if a call to | 533 | * <b> NOTE:</b> Only updat es the SSO entry if a call to | |||||
| 534 | * <co de>SingleS ignOnEntry .getCanRea uthenticat e()</code> returns | 534 | * <co de>SingleS ignOnEntry .getCanRea uthenticat e()</code> returns | 534 | * <co de>SingleS ignOnEntry .getCanRea uthenticat e()</code> returns | |||||
| 535 | * <co de>false</ code>; oth erwise, it is assume d that the SSO entry already | 535 | * <co de>false</ code>; oth erwise, it is assume d that the SSO entry already | 535 | * <co de>false</ code>; oth erwise, it is assume d that the SSO entry already | |||||
| 536 | * has sufficien t informat ion to all ow reauthe ntication and that n o update | 536 | * has sufficien t informat ion to all ow reauthe ntication and that n o update | 536 | * has sufficien t informat ion to all ow reauthe ntication and that n o update | |||||
| 537 | * is needed. | 537 | * is needed. | 537 | * is needed. | |||||
| 538 | * | 538 | * | 538 | * | |||||
| 539 | * @pa ram ssoId identi fier of Si ngle sign to be upda ted | 539 | * @pa ram ssoId identi fier of Si ngle sign to be upda ted | 539 | * @pa ram ssoId identi fier of Si ngle sign to be upda ted | |||||
| 540 | * @pa ram princi pal the <c ode>Princi pal</code> returned by the lat est | 540 | * @pa ram princi pal the <c ode>Princi pal</code> returned by the lat est | 540 | * @pa ram princi pal the <c ode>Princi pal</code> returned by the lat est | |||||
| 541 | * call t o <code>Re alm.authen ticate</co de>. | 541 | * call t o <code>Re alm.authen ticate</co de>. | 541 | * call t o <code>Re alm.authen ticate</co de>. | |||||
| 542 | * @pa ram authTy pe the ty pe of auth enticator used (BASI C, CLIENT_ CERT, | 542 | * @pa ram authTy pe the ty pe of auth enticator used (BASI C, CLIENT_ CERT, | 542 | * @pa ram authTy pe the ty pe of auth enticator used (BASI C, CLIENT_ CERT, | |||||
| 543 | * DIGEST or FORM) | 543 | * DIGEST or FORM) | 543 | * DIGEST or FORM) | |||||
| 544 | * @pa ram userna me the us ername (if any) used for the a uthenticat ion | 544 | * @pa ram userna me the us ername (if any) used for the a uthenticat ion | 544 | * @pa ram userna me the us ername (if any) used for the a uthenticat ion | |||||
| 545 | * @pa ram passwo rd the pa ssword (if any) used for the a uthenticat ion | 545 | * @pa ram passwo rd the pa ssword (if any) used for the a uthenticat ion | 545 | * @pa ram passwo rd the pa ssword (if any) used for the a uthenticat ion | |||||
| 546 | * | 546 | * | 546 | * | |||||
| 547 | * @re turn <code >true</cod e> if the credential s were upd ated, othe rwise | 547 | * @re turn <code >true</cod e> if the credential s were upd ated, othe rwise | 547 | * @re turn <code >true</cod e> if the credential s were upd ated, othe rwise | |||||
| 548 | * <code >false</co de> | 548 | * <code >false</co de> | 548 | * <code >false</co de> | |||||
| 549 | */ | 549 | */ | 549 | */ | |||||
| 550 | protec ted boolea n update(S tring ssoI d, Princip al princip al, String authType, | 550 | protec ted boolea n update(S tring ssoI d, Princip al princip al, String authType, | 550 | protec ted boolea n update(S tring ssoI d, Princip al princip al, String authType, | |||||
| 551 | Stri ng usernam e, String password) { | 551 | Stri ng usernam e, String password) { | 551 | Stri ng usernam e, String password) { | |||||
| 552 | 552 | 552 | ||||||||
| 553 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | 553 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | 553 | Si ngleSignOn Entry sso = cache.ge t(ssoId); | |||||
| 554 | if (sso != n ull && !ss o.getCanRe authentica te()) { | 554 | if (sso != n ull && !ss o.getCanRe authentica te()) { | 554 | if (sso != n ull && !ss o.getCanRe authentica te()) { | |||||
| 555 | if (cont ainerLog.i sDebugEnab led()) { | 555 | if (cont ainerLog.i sDebugEnab led()) { | 555 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 556 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.up date", sso Id, authTy pe)); | 556 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.up date", sso Id, authTy pe)); | 556 | cont ainerLog.d ebug(sm.ge tString("s ingleSignO n.debug.up date", sso Id, authTy pe)); | |||||
| 557 | } | 557 | } | 557 | } | |||||
| 558 | 558 | 558 | ||||||||
| 559 | sso.upda teCredenti als(princi pal, authT ype, usern ame, passw ord); | 559 | sso.upda teCredenti als(princi pal, authT ype, usern ame, passw ord); | 559 | sso.upda teCredenti als(princi pal, authT ype, usern ame, passw ord); | |||||
| 560 | return t rue; | 560 | return t rue; | 560 | return t rue; | |||||
| 561 | } | 561 | } | 561 | } | |||||
| 562 | re turn false ; | 562 | re turn false ; | 562 | re turn false ; | |||||
| 563 | } | 563 | } | 563 | } | |||||
| 564 | 564 | 564 | ||||||||
| 565 | 565 | 565 | ||||||||
| 566 | /** | 566 | /** | 566 | /** | |||||
| 567 | * Rem ove a sing le Session from a Si ngleSignOn . Called when | 567 | * Rem ove a sing le Session from a Si ngleSignOn . Called when | 567 | * Rem ove a sing le Session from a Si ngleSignOn . Called when | |||||
| 568 | * a s ession is timed out and no lon ger active . | 568 | * a s ession is timed out and no lon ger active . | 568 | * a s ession is timed out and no lon ger active . | |||||
| 569 | * | 569 | * | 569 | * | |||||
| 570 | * @pa ram ssoId Single sig n on ident ifier from which to remove the session. | 570 | * @pa ram ssoId Single sig n on ident ifier from which to remove the session. | 570 | * @pa ram ssoId Single sig n on ident ifier from which to remove the session. | |||||
| 571 | * @pa ram sessio n the sess ion to be removed. | 571 | * @pa ram sessio n the sess ion to be removed. | 571 | * @pa ram sessio n the sess ion to be removed. | |||||
| 572 | */ | 572 | */ | 572 | */ | |||||
| 573 | protec ted void r emoveSessi on(String ssoId, Ses sion sessi on) { | 573 | protec ted void r emoveSessi on(String ssoId, Ses sion sessi on) { | 573 | protec ted void r emoveSessi on(String ssoId, Ses sion sessi on) { | |||||
| 574 | 574 | 574 | ||||||||
| 575 | if (containe rLog.isDeb ugEnabled( )) { | 575 | if (containe rLog.isDeb ugEnabled( )) { | 575 | if (containe rLog.isDeb ugEnabled( )) { | |||||
| 576 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.remove Session", session, s soId)); | 576 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.remove Session", session, s soId)); | 576 | containe rLog.debug (sm.getStr ing("singl eSignOn.de bug.remove Session", session, s soId)); | |||||
| 577 | } | 577 | } | 577 | } | |||||
| 578 | 578 | 578 | ||||||||
| 579 | // Get a ref erence to the Single SignOn | 579 | // Get a ref erence to the Single SignOn | 579 | // Get a ref erence to the Single SignOn | |||||
| 580 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | 580 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | 580 | Si ngleSignOn Entry entr y = cache. get(ssoId) ; | |||||
| 581 | if (entry == null) { | 581 | if (entry == null) { | 581 | if (entry == null) { | |||||
| 582 | return; | 582 | return; | 582 | return; | |||||
| 583 | } | 583 | } | 583 | } | |||||
| 584 | 584 | 584 | ||||||||
| 585 | // Remove th e inactive session f rom Single SignOnEntr y | 585 | // Remove th e inactive session f rom Single SignOnEntr y | 585 | // Remove th e inactive session f rom Single SignOnEntr y | |||||
| 586 | en try.remove Session(se ssion); | 586 | en try.remove Session(se ssion); | 586 | en try.remove Session(se ssion); | |||||
| 587 | 587 | 587 | ||||||||
| 588 | // If there are not se ssions lef t in the S ingleSignO nEntry, | 588 | // If there are not se ssions lef t in the S ingleSignO nEntry, | 588 | // If there are not se ssions lef t in the S ingleSignO nEntry, | |||||
| 589 | // deregiste r the entr y. | 589 | // deregiste r the entr y. | 589 | // deregiste r the entr y. | |||||
| 590 | if (entry.fi ndSessions ().size() == 0) { | 590 | if (entry.fi ndSessions ().size() == 0) { | 590 | if (entry.fi ndSessions ().size() == 0) { | |||||
| 591 | deregist er(ssoId); | 591 | deregist er(ssoId); | 591 | deregist er(ssoId); | |||||
| 592 | } | 592 | } | 592 | } | |||||
| 593 | } | 593 | } | 593 | } | |||||
| 594 | 594 | 594 | ||||||||
| 595 | 595 | 595 | ||||||||
| 596 | protec ted Sessio nListener getSession Listener(S tring ssoI d) { | 596 | protec ted Sessio nListener getSession Listener(S tring ssoI d) { | 596 | protec ted Sessio nListener getSession Listener(S tring ssoI d) { | |||||
| 597 | re turn new S ingleSignO nListener( ssoId); | 597 | re turn new S ingleSignO nListener( ssoId); | 597 | re turn new S ingleSignO nListener( ssoId); | |||||
| 598 | } | 598 | } | 598 | } | |||||
| 599 | 599 | 599 | ||||||||
| 600 | 600 | 600 | ||||||||
| 601 | @Overr ide | 601 | @Overr ide | 601 | @Overr ide | |||||
| 602 | protec ted synchr onized voi d startInt ernal() th rows Lifec ycleExcept ion { | 602 | protec ted synchr onized voi d startInt ernal() th rows Lifec ycleExcept ion { | 602 | protec ted synchr onized voi d startInt ernal() th rows Lifec ycleExcept ion { | |||||
| 603 | Co ntainer c = getConta iner(); | 603 | Co ntainer c = getConta iner(); | 603 | Co ntainer c = getConta iner(); | |||||
| 604 | wh ile (c != null && !( c instance of Engine) ) { | 604 | wh ile (c != null && !( c instance of Engine) ) { | 604 | wh ile (c != null && !( c instance of Engine) ) { | |||||
| 605 | c = c.ge tParent(); | 605 | c = c.ge tParent(); | 605 | c = c.ge tParent(); | |||||
| 606 | } | 606 | } | 606 | } | |||||
| 607 | if (c instan ceof Engin e) { | 607 | if (c instan ceof Engin e) { | 607 | if (c instan ceof Engin e) { | |||||
| 608 | engine = (Engine) c; | 608 | engine = (Engine) c; | 608 | engine = (Engine) c; | |||||
| 609 | } | 609 | } | 609 | } | |||||
| 610 | su per.startI nternal(); | 610 | su per.startI nternal(); | 610 | su per.startI nternal(); | |||||
| 611 | } | 611 | } | 611 | } | |||||
| 612 | 612 | 612 | ||||||||
| 613 | 613 | 613 | ||||||||
| 614 | @Overr ide | 614 | @Overr ide | 614 | @Overr ide | |||||
| 615 | protec ted synchr onized voi d stopInte rnal() thr ows Lifecy cleExcepti on { | 615 | protec ted synchr onized voi d stopInte rnal() thr ows Lifecy cleExcepti on { | 615 | protec ted synchr onized voi d stopInte rnal() thr ows Lifecy cleExcepti on { | |||||
| 616 | su per.stopIn ternal(); | 616 | su per.stopIn ternal(); | 616 | su per.stopIn ternal(); | |||||
| 617 | en gine = nul l; | 617 | en gine = nul l; | 617 | en gine = nul l; | |||||
| 618 | } | 618 | } | 618 | } | |||||
| 619 | } | 619 | } | 619 | } |
Araxis Merge (but not the data content of this report) is Copyright © 1993–2017 Araxis Ltd (www.araxis.com). All rights reserved.