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 | FormAuthenticator.java | Fri Sep 29 16:53:28 2017 UTC |
| 2 | C:\Merge Test Files\8.5.23\java\org\apache\catalina\authenticator | FormAuthenticator.java | Thu Sep 28 11:32:16 2017 UTC |
| 3 | C:\Merge Test Files\9.0.1\java\org\apache\catalina\authenticator | FormAuthenticator.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 | 17 | 1314 | 4 | 1404 | ||
| Changed | 7 | 34 | 2 | 5 | 9 | 39 |
| Inserted | 6 | 23 | 0 | 0 | 3 | 6 |
| Removed | 3 | 6 | 1 | 1 | 7 | 24 |
| 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.io.Input Stream; | 20 | import jav a.io.Input Stream; | 20 | import jav a.io.Input Stream; | |||||
| 21 | import jav a.security .Principal ; | 21 | import jav a.security .Principal ; | 21 | import jav a.security .Principal ; | |||||
| 22 | import jav a.util.Enu meration; | 22 | import jav a.util.Enu meration; | 22 | import jav a.util.Enu meration; | |||||
| 23 | import jav a.util.Ite rator; | 23 | import jav a.util.Ite rator; | 23 | import jav a.util.Ite rator; | |||||
| 24 | import jav a.util.Loc ale; | 24 | import jav a.util.Loc ale; | 24 | import jav a.util.Loc ale; | |||||
| 25 | 25 | 25 | ||||||||
| 26 | import jav ax.servlet .RequestDi spatcher; | 26 | import jav ax.servlet .RequestDi spatcher; | 26 | import jav ax.servlet .RequestDi spatcher; | |||||
| 27 | import jav ax.servlet .http.Cook ie; | 27 | import jav ax.servlet .http.Cook ie; | 27 | import jav ax.servlet .http.Cook ie; | |||||
| 28 | import jav ax.servlet .http.Http ServletReq uest; | 28 | import jav ax.servlet .http.Http ServletReq uest; | 28 | import jav ax.servlet .http.Http ServletReq uest; | |||||
| 29 | import jav ax.servlet .http.Http ServletRes ponse; | 29 | import jav ax.servlet .http.Http ServletRes ponse; | 29 | import jav ax.servlet .http.Http ServletRes ponse; | |||||
| 30 | 30 | 30 | ||||||||
| 31 | import org .apache.ca talina.Man ager; | 31 | import org .apache.ca talina.Man ager; | 31 | import org .apache.ca talina.Man ager; | |||||
| 32 | import org .apache.ca talina.Rea lm; | 32 | import org .apache.ca talina.Rea lm; | 32 | import org .apache.ca talina.Rea lm; | |||||
| 33 | import org .apache.ca talina.Ses sion; | 33 | import org .apache.ca talina.Ses sion; | 33 | import org .apache.ca talina.Ses sion; | |||||
| 34 | import org .apache.ca talina.con nector.Req uest; | 34 | import org .apache.ca talina.con nector.Req uest; | 34 | import org .apache.ca talina.con nector.Req uest; | |||||
| 35 | import org .apache.ca talina.con nector.Res ponse; | 35 | import org .apache.ca talina.con nector.Res ponse; | 35 | import org .apache.ca talina.con nector.Res ponse; | |||||
| 36 | import org .apache.co yote.Actio nCode; | 36 | import org .apache.co yote.Actio nCode; | 36 | import org .apache.co yote.Actio nCode; | |||||
| 37 | import org .apache.ju li.logging .Log; | 37 | import org .apache.ju li.logging .Log; | 37 | import org .apache.ju li.logging .Log; | |||||
| 38 | import org .apache.ju li.logging .LogFactor y; | 38 | import org .apache.ju li.logging .LogFactor y; | 38 | import org .apache.ju li.logging .LogFactor y; | |||||
| 39 | import org .apache.to mcat.util. ExceptionU tils; | 39 | import org .apache.to mcat.util. ExceptionU tils; | 39 | import org .apache.to mcat.util. ExceptionU tils; | |||||
| 40 | import org .apache.to mcat.util. buf.ByteCh unk; | 40 | import org .apache.to mcat.util. buf.ByteCh unk; | 40 | import org .apache.to mcat.util. buf.ByteCh unk; | |||||
| 41 | import org .apache.to mcat.util. buf.CharCh unk; | |||||||||
| 42 | import org .apache.to mcat.util. buf.Messag eBytes; | 41 | import org .apache.to mcat.util. buf.Messag eBytes; | 41 | import org .apache.to mcat.util. buf.Messag eBytes; | |||||
| 43 | import org .apache.to mcat.util. descriptor .web.Login Config; | 42 | import org .apache.to mcat.util. descriptor .web.Login Config; | 42 | import org .apache.to mcat.util. descriptor .web.Login Config; | |||||
| 44 | import org .apache.to mcat.util. http.MimeH eaders; | 43 | import org .apache.to mcat.util. http.MimeH eaders; | 43 | import org .apache.to mcat.util. http.MimeH eaders; | |||||
| 45 | 44 | 44 | ||||||||
| 46 | /** | 45 | /** | 45 | /** | |||||
| 47 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f FORM BAS ED | 46 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f FORM BAS ED | 46 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f FORM BAS ED | |||||
| 48 | * Authent ication, a s describe d in the S ervlet API Specifica tion. | 47 | * Authent ication, a s describe d in the S ervlet API Specifica tion. | 47 | * Authent ication, a s describe d in the S ervlet API Specifica tion. | |||||
| 49 | * | 48 | * | 48 | * | |||||
| 50 | * @author Craig R. McClanahan | 49 | * @author Craig R. McClanahan | 49 | * @author Craig R. McClanahan | |||||
| 51 | * @author Remy Mauc herat | 50 | * @author Remy Mauc herat | 50 | * @author Remy Mauc herat | |||||
| 52 | */ | 51 | */ | 51 | */ | |||||
| 53 | public cla ss FormAut henticator | 52 | public cla ss FormAut henticator | 52 | public cla ss FormAut henticator | |||||
| 54 | extend s Authenti catorBase { | 53 | extend s Authenti catorBase { | 53 | extend s Authenti catorBase { | |||||
| 55 | 54 | 54 | ||||||||
| 56 | privat e static f inal Log l og = LogFa ctory.getL og(FormAut henticator .class); | 55 | privat e static f inal Log l og = LogFa ctory.getL og(FormAut henticator .class); | 55 | privat e static f inal Log l og = LogFa ctory.getL og(FormAut henticator .class); | |||||
| 57 | 56 | 56 | ||||||||
| 58 | 57 | 57 | ||||||||
| 59 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | 58 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | 58 | // --- ---------- ---------- ---------- ---------- ---------- Instance Variables | |||||
| 60 | 59 | 59 | ||||||||
| 61 | /** | 60 | /** | 60 | /** | |||||
| 62 | * Cha racter enc oding to u se to read the usern ame and pa ssword par ameters | 61 | * Cha racter enc oding to u se to read the usern ame and pa ssword par ameters | 61 | * Cha racter enc oding to u se to read the usern ame and pa ssword par ameters | |||||
| 63 | * fro m the requ est. If no t set, the encoding of the req uest body will be | 62 | * fro m the requ est. If no t set, the encoding of the req uest body will be | 62 | * fro m the requ est. If no t set, the encoding of the req uest body will be | |||||
| 64 | * use d. | 63 | * use d. | 63 | * use d. | |||||
| 65 | */ | 64 | */ | 64 | */ | |||||
| 66 | protec ted String character Encoding = null; | 65 | protec ted String character Encoding = null; | 65 | protec ted String character Encoding = null; | |||||
| 67 | 66 | 66 | ||||||||
| 68 | /** | 67 | /** | 67 | /** | |||||
| 69 | * Lan ding page to use if a user tri es to acce ss the log in page di rectly or | 68 | * Lan ding page to use if a user tri es to acce ss the log in page di rectly or | 68 | * Lan ding page to use if a user tri es to acce ss the log in page di rectly or | |||||
| 70 | * if the sessio n times ou t during l ogin. If n ot set, er ror respon ses will | 69 | * if the sessio n times ou t during l ogin. If n ot set, er ror respon ses will | 69 | * if the sessio n times ou t during l ogin. If n ot set, er ror respon ses will | |||||
| 71 | * be sent inste ad. | 70 | * be sent inste ad. | 70 | * be sent inste ad. | |||||
| 72 | */ | 71 | */ | 71 | */ | |||||
| 73 | protec ted String landingPa ge = null; | 72 | protec ted String landingPa ge = null; | 72 | protec ted String landingPa ge = null; | |||||
| 74 | 73 | 73 | ||||||||
| 75 | 74 | 74 | ||||||||
| 76 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | 75 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | 75 | // --- ---------- ---------- ---------- ---------- ---------- -------- P roperties | |||||
| 77 | 76 | 76 | ||||||||
| 78 | /** | 77 | /** | 77 | /** | |||||
| 79 |
* Return t
he charact
er encodin
g to use t
o read the
user
|
78 | * Return t he charact er encodin g to use t o read the user name and p assword. | 78 | * Ret urn the ch aracter en coding to use to rea d the user name and password. | |||||
| 79 | * | 79 | * | |||||||
| 80 | * @re turn The n ame of the character encoding | 80 | * @re turn The n ame of the character encoding | |||||||
| 80 | */ | 81 | */ | 81 | */ | |||||
| 81 | public String ge tCharacter Encoding() { | 82 | public String ge tCharacter Encoding() { | 82 | public String ge tCharacter Encoding() { | |||||
| 82 | re turn chara cterEncodi ng; | 83 | re turn chara cterEncodi ng; | 83 | re turn chara cterEncodi ng; | |||||
| 83 | } | 84 | } | 84 | } | |||||
| 84 | 85 | 85 | ||||||||
| 85 | 86 | 86 | ||||||||
| 86 | /** | 87 | /** | 87 | /** | |||||
| 87 |
* Set the
character
encoding t
o be used
to read th
e user
|
88 | * Set the character encoding t o be used to read th e user name and p assword. | 88 | * Set the chara cter encod ing to be used to re ad the use r name and password. | |||||
| 89 | * | 89 | * | |||||||
| 90 | * @pa ram encodi ng The nam e of the e ncoding to use | 90 | * @pa ram encodi ng The nam e of the e ncoding to use | |||||||
| 88 | */ | 91 | */ | 91 | */ | |||||
| 89 | public void setC haracterEn coding(Str ing encodi ng) { | 92 | public void setC haracterEn coding(Str ing encodi ng) { | 92 | public void setC haracterEn coding(Str ing encodi ng) { | |||||
| 90 | ch aracterEnc oding = en coding; | 93 | ch aracterEnc oding = en coding; | 93 | ch aracterEnc oding = en coding; | |||||
| 91 | } | 94 | } | 94 | } | |||||
| 92 | 95 | 95 | ||||||||
| 93 | 96 | 96 | ||||||||
| 94 | /** | 97 | /** | 97 | /** | |||||
| 95 | * Ret urn the la nding page to use wh en FORM au th is mis- used. | 98 | * Ret urn the la nding page to use wh en FORM au th is mis- used. | 98 | * Ret urn the la nding page to use wh en FORM au th is mis- used. | |||||
| 99 | * | 99 | * | |||||||
| 100 | * @re turn The p ath to the landing p age relati ve to the web applic ation root | 100 | * @re turn The p ath to the landing p age relati ve to the web applic ation root | |||||||
| 96 | */ | 101 | */ | 101 | */ | |||||
| 97 | public String ge tLandingPa ge() { | 102 | public String ge tLandingPa ge() { | 102 | public String ge tLandingPa ge() { | |||||
| 98 | re turn landi ngPage; | 103 | re turn landi ngPage; | 103 | re turn landi ngPage; | |||||
| 99 | } | 104 | } | 104 | } | |||||
| 100 | 105 | 105 | ||||||||
| 101 | 106 | 106 | ||||||||
| 102 | /** | 107 | /** | 107 | /** | |||||
| 103 | * Set the landi ng page to use when the FORM a uth is mis -used. | 108 | * Set the landi ng page to use when the FORM a uth is mis -used. | 108 | * Set the landi ng page to use when the FORM a uth is mis -used. | |||||
| 109 | * | 109 | * | |||||||
| 110 | * @pa ram landin gPage The path to th e landing page relat ive to the web | 110 | * @pa ram landin gPage The path to th e landing page relat ive to the web | |||||||
| 111 | * appl ication ro ot | 111 | * appl ication ro ot | |||||||
| 104 | */ | 112 | */ | 112 | */ | |||||
| 105 | public void setL andingPage (String la ndingPage) { | 113 | public void setL andingPage (String la ndingPage) { | 113 | public void setL andingPage (String la ndingPage) { | |||||
| 106 | th is.landing Page = lan dingPage; | 114 | th is.landing Page = lan dingPage; | 114 | th is.landing Page = lan dingPage; | |||||
| 107 | } | 115 | } | 115 | } | |||||
| 108 | 116 | 116 | ||||||||
| 109 | 117 | 117 | ||||||||
| 110 |
// -------
----------
----------
----------
----------
-------
---
P
ubli
c
|
118 |
// -------
----------
----------
----------
----------
-------
|
118 | // --- ---------- ---------- ---------- ---------- ---------- - Protecte d Methods | |||||
| 111 | 119 | 119 | ||||||||
| 112 | 120 | 120 | ||||||||
| 113 | /** | 121 | /** | 121 | /** | |||||
| 114 | * Aut henticate the user m aking this request, based on t he specifi ed | 122 | * Aut henticate the user m aking this request, based on t he specifi ed | 122 | * Aut henticate the user m aking this request, based on t he specifi ed | |||||
| 115 | * log in configu ration. R eturn <cod e>true</co de> if any specified | 123 | * log in configu ration. R eturn <cod e>true</co de> if any specified | 123 | * log in configu ration. R eturn <cod e>true</co de> if any specified | |||||
| 116 | * con straint ha s been sat isfied, or <code>fal se</code> if we have | 124 | * con straint ha s been sat isfied, or <code>fal se</code> if we have | 124 | * con straint ha s been sat isfied, or <code>fal se</code> if we have | |||||
| 117 | * cre ated a res ponse chal lenge alre ady. | 125 | * cre ated a res ponse chal lenge alre ady. | 125 | * cre ated a res ponse chal lenge alre ady. | |||||
| 118 | * | 126 | * | 126 | * | |||||
| 119 | * @pa ram reques t Request we are pro cessing | 127 | * @pa ram reques t Request we are pro cessing | 127 | * @pa ram reques t Request we are pro cessing | |||||
| 120 | * @pa ram respon se Respons e we are c reating | 128 | * @pa ram respon se Respons e we are c reating | 128 | * @pa ram respon se Respons e we are c reating | |||||
| 121 | * | 129 | * | 129 | * | |||||
| 122 | * @ex ception IO Exception if an inpu t/output e rror occur s | 130 | * @ex ception IO Exception if an inpu t/output e rror occur s | 130 | * @ex ception IO Exception if an inpu t/output e rror occur s | |||||
| 123 | */ | 131 | */ | 131 | */ | |||||
| 124 | @Overr ide | 132 | @Overr ide | 132 | @Overr ide | |||||
| 125 |
p
ubli
c
|
133 | p rote c ted boolean doA uthenticat e(Request request, H ttpServlet Response r esponse) | 133 | protec ted boolea n doAuthen ticate(Req uest reque st, HttpSe rvletRespo nse respon se) | |||||
| 126 | throws I OException { | 134 | throws I OException { | 134 | throws I OException { | |||||
| 127 | 135 | 135 | ||||||||
| 128 | if (checkFor CachedAuth entication (request, response, true)) { | 136 | if (checkFor CachedAuth entication (request, response, true)) { | 136 | if (checkFor CachedAuth entication (request, response, true)) { | |||||
| 129 | return t rue; | 137 | return t rue; | 137 | return t rue; | |||||
| 130 | } | 138 | } | 138 | } | |||||
| 131 | 139 | 139 | ||||||||
| 132 | // Reference s to objec ts we will need late r | 140 | // Reference s to objec ts we will need late r | 140 | // Reference s to objec ts we will need late r | |||||
| 133 | Se ssion sess ion = null ; | 141 | Se ssion sess ion = null ; | 141 | Se ssion sess ion = null ; | |||||
| 134 | Pr incipal pr incipal = null; | 142 | Pr incipal pr incipal = null; | 142 | Pr incipal pr incipal = null; | |||||
| 135 | 143 | 143 | ||||||||
| 136 | // Have we a uthenticat ed this us er before but have c aching dis abled? | 144 | // Have we a uthenticat ed this us er before but have c aching dis abled? | 144 | // Have we a uthenticat ed this us er before but have c aching dis abled? | |||||
| 137 | if (!cache) { | 145 | if (!cache) { | 145 | if (!cache) { | |||||
| 138 | session = request. getSession Internal(t rue); | 146 | session = request. getSession Internal(t rue); | 146 | session = request. getSession Internal(t rue); | |||||
| 139 | if (log. isDebugEna bled()) { | 147 | if (log. isDebugEna bled()) { | 147 | if (log. isDebugEna bled()) { | |||||
| 140 | log. debug("Che cking for reauthenti cate in se ssion " + session); | 148 | log. debug("Che cking for reauthenti cate in se ssion " + session); | 148 | log. debug("Che cking for reauthenti cate in se ssion " + session); | |||||
| 141 | } | 149 | } | 149 | } | |||||
| 142 | String u sername = | 150 | String u sername = | 150 | String u sername = | |||||
| 143 | (Str ing) sessi on.getNote (Constants .SESS_USER NAME_NOTE) ; | 151 | (Str ing) sessi on.getNote (Constants .SESS_USER NAME_NOTE) ; | 151 | (Str ing) sessi on.getNote (Constants .SESS_USER NAME_NOTE) ; | |||||
| 144 | String p assword = | 152 | String p assword = | 152 | String p assword = | |||||
| 145 | (Str ing) sessi on.getNote (Constants .SESS_PASS WORD_NOTE) ; | 153 | (Str ing) sessi on.getNote (Constants .SESS_PASS WORD_NOTE) ; | 153 | (Str ing) sessi on.getNote (Constants .SESS_PASS WORD_NOTE) ; | |||||
| 146 | if ((use rname != n ull) && (p assword != null)) { | 154 | if ((use rname != n ull) && (p assword != null)) { | 154 | if ((use rname != n ull) && (p assword != null)) { | |||||
| 147 | if ( log.isDebu gEnabled() ) { | 155 | if ( log.isDebu gEnabled() ) { | 155 | if ( log.isDebu gEnabled() ) { | |||||
| 148 | log.debug( "Reauthent icating us ername '" + username + "'"); | 156 | log.debug( "Reauthent icating us ername '" + username + "'"); | 156 | log.debug( "Reauthent icating us ername '" + username + "'"); | |||||
| 149 | } | 157 | } | 157 | } | |||||
| 150 | prin cipal = | 158 | prin cipal = | 158 | prin cipal = | |||||
| 151 | context.ge tRealm().a uthenticat e(username , password ); | 159 | context.ge tRealm().a uthenticat e(username , password ); | 159 | context.ge tRealm().a uthenticat e(username , password ); | |||||
| 152 | if ( principal != null) { | 160 | if ( principal != null) { | 160 | if ( principal != null) { | |||||
| 153 | session.se tNote(Cons tants.FORM _PRINCIPAL _NOTE, pri ncipal); | 161 | session.se tNote(Cons tants.FORM _PRINCIPAL _NOTE, pri ncipal); | 161 | session.se tNote(Cons tants.FORM _PRINCIPAL _NOTE, pri ncipal); | |||||
| 154 | if (!match Request(re quest)) { | 162 | if (!match Request(re quest)) { | 162 | if (!match Request(re quest)) { | |||||
| 155 | regist er(request , response , principa l, | 163 | regist er(request , response , principa l, | 163 | regist er(request , response , principa l, | |||||
| 156 | HttpServ letRequest .FORM_AUTH , | 164 | HttpServ letRequest .FORM_AUTH , | 164 | HttpServ letRequest .FORM_AUTH , | |||||
| 157 | username , password ); | 165 | username , password ); | 165 | username , password ); | |||||
| 158 | return true; | 166 | return true; | 166 | return true; | |||||
| 159 | } | 167 | } | 167 | } | |||||
| 160 | } | 168 | } | 168 | } | |||||
| 161 | if ( log.isDebu gEnabled() ) { | 169 | if ( log.isDebu gEnabled() ) { | 169 | if ( log.isDebu gEnabled() ) { | |||||
| 162 | log.debug( "Reauthent ication fa iled, proc eed normal ly"); | 170 | log.debug( "Reauthent ication fa iled, proc eed normal ly"); | 170 | log.debug( "Reauthent ication fa iled, proc eed normal ly"); | |||||
| 163 | } | 171 | } | 171 | } | |||||
| 164 | } | 172 | } | 172 | } | |||||
| 165 | } | 173 | } | 173 | } | |||||
| 166 | 174 | 174 | ||||||||
| 167 | // Is this t he re-subm it of the original r equest URI after suc cessful | 175 | // Is this t he re-subm it of the original r equest URI after suc cessful | 175 | // Is this t he re-subm it of the original r equest URI after suc cessful | |||||
| 168 | // authentic ation? If so, forwa rd the *or iginal* re quest inst ead. | 176 | // authentic ation? If so, forwa rd the *or iginal* re quest inst ead. | 176 | // authentic ation? If so, forwa rd the *or iginal* re quest inst ead. | |||||
| 169 | if (matchReq uest(reque st)) { | 177 | if (matchReq uest(reque st)) { | 177 | if (matchReq uest(reque st)) { | |||||
| 170 | session = request. getSession Internal(t rue); | 178 | session = request. getSession Internal(t rue); | 178 | session = request. getSession Internal(t rue); | |||||
| 171 | if (log. isDebugEna bled()) { | 179 | if (log. isDebugEna bled()) { | 179 | if (log. isDebugEna bled()) { | |||||
| 172 | log. debug("Res tore reque st from se ssion '" | 180 | log. debug("Res tore reque st from se ssion '" | 180 | log. debug("Res tore reque st from se ssion '" | |||||
| 173 | + se ssion.getI dInternal( ) | 181 | + se ssion.getI dInternal( ) | 181 | + se ssion.getI dInternal( ) | |||||
| 174 | + "' "); | 182 | + "' "); | 182 | + "' "); | |||||
| 175 | } | 183 | } | 183 | } | |||||
| 176 | principa l = (Princ ipal) | 184 | principa l = (Princ ipal) | 184 | principa l = (Princ ipal) | |||||
| 177 | sess ion.getNot e(Constant s.FORM_PRI NCIPAL_NOT E); | 185 | sess ion.getNot e(Constant s.FORM_PRI NCIPAL_NOT E); | 185 | sess ion.getNot e(Constant s.FORM_PRI NCIPAL_NOT E); | |||||
| 178 | register (request, response, principal, HttpServl etRequest. FORM_AUTH, | 186 | register (request, response, principal, HttpServl etRequest. FORM_AUTH, | 186 | register (request, response, principal, HttpServl etRequest. FORM_AUTH, | |||||
| 179 | (String) session.ge tNote(Cons tants.SESS _USERNAME_ NOTE), | 187 | (String) session.ge tNote(Cons tants.SESS _USERNAME_ NOTE), | 187 | (String) session.ge tNote(Cons tants.SESS _USERNAME_ NOTE), | |||||
| 180 | (String) session.ge tNote(Cons tants.SESS _PASSWORD_ NOTE)); | 188 | (String) session.ge tNote(Cons tants.SESS _PASSWORD_ NOTE)); | 188 | (String) session.ge tNote(Cons tants.SESS _PASSWORD_ NOTE)); | |||||
| 181 | // If we 're cachin g principa ls we no l onger need the usern ame | 189 | // If we 're cachin g principa ls we no l onger need the usern ame | 189 | // If we 're cachin g principa ls we no l onger need the usern ame | |||||
| 182 | // and p assword in the sessi on, so rem ove them | 190 | // and p assword in the sessi on, so rem ove them | 190 | // and p assword in the sessi on, so rem ove them | |||||
| 183 | if (cach e) { | 191 | if (cach e) { | 191 | if (cach e) { | |||||
| 184 | sess ion.remove Note(Const ants.SESS_ USERNAME_N OTE); | 192 | sess ion.remove Note(Const ants.SESS_ USERNAME_N OTE); | 192 | sess ion.remove Note(Const ants.SESS_ USERNAME_N OTE); | |||||
| 185 | sess ion.remove Note(Const ants.SESS_ PASSWORD_N OTE); | 193 | sess ion.remove Note(Const ants.SESS_ PASSWORD_N OTE); | 193 | sess ion.remove Note(Const ants.SESS_ PASSWORD_N OTE); | |||||
| 186 | } | 194 | } | 194 | } | |||||
| 187 | if (rest oreRequest (request, session)) { | 195 | if (rest oreRequest (request, session)) { | 195 | if (rest oreRequest (request, session)) { | |||||
| 188 | if ( log.isDebu gEnabled() ) { | 196 | if ( log.isDebu gEnabled() ) { | 196 | if ( log.isDebu gEnabled() ) { | |||||
| 189 | log.debug( "Proceed t o restored request") ; | 197 | log.debug( "Proceed t o restored request") ; | 197 | log.debug( "Proceed t o restored request") ; | |||||
| 190 | } | 198 | } | 198 | } | |||||
| 191 | retu rn true; | 199 | retu rn true; | 199 | retu rn true; | |||||
| 192 | } else { | 200 | } else { | 200 | } else { | |||||
| 193 | if ( log.isDebu gEnabled() ) { | 201 | if ( log.isDebu gEnabled() ) { | 201 | if ( log.isDebu gEnabled() ) { | |||||
| 194 | log.debug( "Restore o f original request f ailed"); | 202 | log.debug( "Restore o f original request f ailed"); | 202 | log.debug( "Restore o f original request f ailed"); | |||||
| 195 | } | 203 | } | 203 | } | |||||
| 196 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST) ; | 204 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST) ; | 204 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST) ; | |||||
| 197 | retu rn false; | 205 | retu rn false; | 205 | retu rn false; | |||||
| 198 | } | 206 | } | 206 | } | |||||
| 199 | } | 207 | } | 207 | } | |||||
| 200 | 208 | 208 | ||||||||
| 201 | // Acquire r eferences to objects we will n eed to eva luate | 209 | // Acquire r eferences to objects we will n eed to eva luate | 209 | // Acquire r eferences to objects we will n eed to eva luate | |||||
| 202 | Me ssageBytes uriMB = M essageByte s.newInsta nce(); | |||||||||
| 203 | Ch arChunk ur iCC = uriM B.getCharC hunk(); | |||||||||
| 204 | ur iCC.setLim it(-1); | |||||||||
| 205 | St ring conte xtPath = r equest.get ContextPat h(); | 210 | St ring conte xtPath = r equest.get ContextPat h(); | 210 | St ring conte xtPath = r equest.get ContextPat h(); | |||||
| 206 | St ring reque stURI = re quest.getD ecodedRequ estURI(); | 211 | St ring reque stURI = re quest.getD ecodedRequ estURI(); | 211 | St ring reque stURI = re quest.getD ecodedRequ estURI(); | |||||
| 207 | 212 | 212 | ||||||||
| 208 | // Is this t he action request fr om the log in page? | 213 | // Is this t he action request fr om the log in page? | 213 | // Is this t he action request fr om the log in page? | |||||
| 209 | bo olean logi nAction = | 214 | bo olean logi nAction = | 214 | bo olean logi nAction = | |||||
| 210 | requestU RI.startsW ith(contex tPath) && | 215 | requestU RI.startsW ith(contex tPath) && | 215 | requestU RI.startsW ith(contex tPath) && | |||||
| 211 | requestU RI.endsWit h(Constant s.FORM_ACT ION); | 216 | requestU RI.endsWit h(Constant s.FORM_ACT ION); | 216 | requestU RI.endsWit h(Constant s.FORM_ACT ION); | |||||
| 212 | 217 | 217 | ||||||||
| 213 | Lo ginConfig config = c ontext.get LoginConfi g(); | 218 | Lo ginConfig config = c ontext.get LoginConfi g(); | 218 | Lo ginConfig config = c ontext.get LoginConfi g(); | |||||
| 214 | 219 | 219 | ||||||||
| 215 | // No -- Sav e this req uest and r edirect to the form login page | 220 | // No -- Sav e this req uest and r edirect to the form login page | 220 | // No -- Sav e this req uest and r edirect to the form login page | |||||
| 216 | if (!loginAc tion) { | 221 | if (!loginAc tion) { | 221 | if (!loginAc tion) { | |||||
| 217 | // If th is request was to th e root of the contex t without a trailing | 222 | // If th is request was to th e root of the contex t without a trailing | 222 | // If th is request was to th e root of the contex t without a trailing | |||||
| 218 | // '/', need to re direct to add it els e the subm it of the login form | 223 | // '/', need to re direct to add it els e the subm it of the login form | 223 | // '/', need to re direct to add it els e the subm it of the login form | |||||
| 219 | // may n ot go to t he correct web appli cation | 224 | // may n ot go to t he correct web appli cation | 224 | // may n ot go to t he correct web appli cation | |||||
| 220 | if (requ est.getSer vletPath() .length() == 0 && re quest.getP athInfo() == null) { | 225 | if (requ est.getSer vletPath() .length() == 0 && re quest.getP athInfo() == null) { | 225 | if (requ est.getSer vletPath() .length() == 0 && re quest.getP athInfo() == null) { | |||||
| 221 | Stri ngBuilder location = new Strin gBuilder(r equestURI) ; | 226 | Stri ngBuilder location = new Strin gBuilder(r equestURI) ; | 226 | Stri ngBuilder location = new Strin gBuilder(r equestURI) ; | |||||
| 222 | loca tion.appen d('/'); | 227 | loca tion.appen d('/'); | 227 | loca tion.appen d('/'); | |||||
| 223 | if ( request.ge tQueryStri ng() != nu ll) { | 228 | if ( request.ge tQueryStri ng() != nu ll) { | 228 | if ( request.ge tQueryStri ng() != nu ll) { | |||||
| 224 | location.a ppend('?') ; | 229 | location.a ppend('?') ; | 229 | location.a ppend('?') ; | |||||
| 225 | location.a ppend(requ est.getQue ryString() ); | 230 | location.a ppend(requ est.getQue ryString() ); | 230 | location.a ppend(requ est.getQue ryString() ); | |||||
| 226 | } | 231 | } | 231 | } | |||||
| 227 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(locat ion.toStri ng())); | 232 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(locat ion.toStri ng())); | 232 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(locat ion.toStri ng())); | |||||
| 228 | retu rn false; | 233 | retu rn false; | 233 | retu rn false; | |||||
| 229 | } | 234 | } | 234 | } | |||||
| 230 | 235 | 235 | ||||||||
| 231 | session = request. getSession Internal(t rue); | 236 | session = request. getSession Internal(t rue); | 236 | session = request. getSession Internal(t rue); | |||||
| 232 | if (log. isDebugEna bled()) { | 237 | if (log. isDebugEna bled()) { | 237 | if (log. isDebugEna bled()) { | |||||
| 233 | log. debug("Sav e request in session '" + sess ion.getIdI nternal() + "'"); | 238 | log. debug("Sav e request in session '" + sess ion.getIdI nternal() + "'"); | 238 | log. debug("Sav e request in session '" + sess ion.getIdI nternal() + "'"); | |||||
| 234 | } | 239 | } | 239 | } | |||||
| 235 | try { | 240 | try { | 240 | try { | |||||
| 236 | save Request(re quest, ses sion); | 241 | save Request(re quest, ses sion); | 241 | save Request(re quest, ses sion); | |||||
| 237 | } catch (IOExcepti on ioe) { | 242 | } catch (IOExcepti on ioe) { | 242 | } catch (IOExcepti on ioe) { | |||||
| 238 | log. debug("Req uest body too big to save duri ng authent ication"); | 243 | log. debug("Req uest body too big to save duri ng authent ication"); | 243 | log. debug("Req uest body too big to save duri ng authent ication"); | |||||
| 239 | resp onse.sendE rror(HttpS ervletResp onse.SC_FO RBIDDEN, | 244 | resp onse.sendE rror(HttpS ervletResp onse.SC_FO RBIDDEN, | 244 | resp onse.sendE rror(HttpS ervletResp onse.SC_FO RBIDDEN, | |||||
| 240 | sm.get String("au thenticato r.requestB odyTooBig" )); | 245 | sm.get String("au thenticato r.requestB odyTooBig" )); | 245 | sm.get String("au thenticato r.requestB odyTooBig" )); | |||||
| 241 | retu rn false; | 246 | retu rn false; | 246 | retu rn false; | |||||
| 242 | } | 247 | } | 247 | } | |||||
| 243 | forwardT oLoginPage (request, response, config); | 248 | forwardT oLoginPage (request, response, config); | 248 | forwardT oLoginPage (request, response, config); | |||||
| 244 | return f alse; | 249 | return f alse; | 249 | return f alse; | |||||
| 245 | } | 250 | } | 250 | } | |||||
| 246 | 251 | 251 | ||||||||
| 247 | // Yes -- Ac knowledge the reques t, validat e the spec ified cred entials | 252 | // Yes -- Ac knowledge the reques t, validat e the spec ified cred entials | 252 | // Yes -- Ac knowledge the reques t, validat e the spec ified cred entials | |||||
| 248 | // and redir ect to the error pag e if they are not co rrect | 253 | // and redir ect to the error pag e if they are not co rrect | 253 | // and redir ect to the error pag e if they are not co rrect | |||||
| 249 | re quest.getR esponse(). sendAcknow ledgement( ); | 254 | re quest.getR esponse(). sendAcknow ledgement( ); | 254 | re quest.getR esponse(). sendAcknow ledgement( ); | |||||
| 250 | Re alm realm = context. getRealm() ; | 255 | Re alm realm = context. getRealm() ; | 255 | Re alm realm = context. getRealm() ; | |||||
| 251 | if (characte rEncoding != null) { | 256 | if (characte rEncoding != null) { | 256 | if (characte rEncoding != null) { | |||||
| 252 | request. setCharact erEncoding (character Encoding); | 257 | request. setCharact erEncoding (character Encoding); | 257 | request. setCharact erEncoding (character Encoding); | |||||
| 253 | } | 258 | } | 258 | } | |||||
| 254 | St ring usern ame = requ est.getPar ameter(Con stants.FOR M_USERNAME ); | 259 | St ring usern ame = requ est.getPar ameter(Con stants.FOR M_USERNAME ); | 259 | St ring usern ame = requ est.getPar ameter(Con stants.FOR M_USERNAME ); | |||||
| 255 | St ring passw ord = requ est.getPar ameter(Con stants.FOR M_PASSWORD ); | 260 | St ring passw ord = requ est.getPar ameter(Con stants.FOR M_PASSWORD ); | 260 | St ring passw ord = requ est.getPar ameter(Con stants.FOR M_PASSWORD ); | |||||
| 256 | if (log.isDe bugEnabled ()) { | 261 | if (log.isDe bugEnabled ()) { | 261 | if (log.isDe bugEnabled ()) { | |||||
| 257 | log.debu g("Authent icating us ername '" + username + "'"); | 262 | log.debu g("Authent icating us ername '" + username + "'"); | 262 | log.debu g("Authent icating us ername '" + username + "'"); | |||||
| 258 | } | 263 | } | 263 | } | |||||
| 259 | pr incipal = realm.auth enticate(u sername, p assword); | 264 | pr incipal = realm.auth enticate(u sername, p assword); | 264 | pr incipal = realm.auth enticate(u sername, p assword); | |||||
| 260 | if (principa l == null) { | 265 | if (principa l == null) { | 265 | if (principa l == null) { | |||||
| 261 | forwardT oErrorPage (request, response, config); | 266 | forwardT oErrorPage (request, response, config); | 266 | forwardT oErrorPage (request, response, config); | |||||
| 262 | return f alse; | 267 | return f alse; | 267 | return f alse; | |||||
| 263 | } | 268 | } | 268 | } | |||||
| 264 | 269 | 269 | ||||||||
| 265 | if (log.isDe bugEnabled ()) { | 270 | if (log.isDe bugEnabled ()) { | 270 | if (log.isDe bugEnabled ()) { | |||||
| 266 | log.debu g("Authent ication of '" + user name + "' was succes sful"); | 271 | log.debu g("Authent ication of '" + user name + "' was succes sful"); | 271 | log.debu g("Authent ication of '" + user name + "' was succes sful"); | |||||
| 267 | } | 272 | } | 272 | } | |||||
| 268 | 273 | 273 | ||||||||
| 269 | if (session == null) { | 274 | if (session == null) { | 274 | if (session == null) { | |||||
| 270 | session = request. getSession Internal(f alse); | 275 | session = request. getSession Internal(f alse); | 275 | session = request. getSession Internal(f alse); | |||||
| 271 | } | 276 | } | 276 | } | |||||
| 272 | if (session == null) { | 277 | if (session == null) { | 277 | if (session == null) { | |||||
| 273 | if (cont ainerLog.i sDebugEnab led()) { | 278 | if (cont ainerLog.i sDebugEnab led()) { | 278 | if (cont ainerLog.i sDebugEnab led()) { | |||||
| 274 | cont ainerLog.d ebug | 279 | cont ainerLog.d ebug | 279 | cont ainerLog.d ebug | |||||
| 275 | ("User too k so long to log on the sessio n expired" ); | 280 | ("User too k so long to log on the sessio n expired" ); | 280 | ("User too k so long to log on the sessio n expired" ); | |||||
| 276 | } | 281 | } | 281 | } | |||||
| 277 | if (land ingPage == null) { | 282 | if (land ingPage == null) { | 282 | if (land ingPage == null) { | |||||
| 278 | resp onse.sendE rror(HttpS ervletResp onse.SC_RE QUEST_TIME OUT, | 283 | resp onse.sendE rror(HttpS ervletResp onse.SC_RE QUEST_TIME OUT, | 283 | resp onse.sendE rror(HttpS ervletResp onse.SC_RE QUEST_TIME OUT, | |||||
| 279 | sm.get String("au thenticato r.sessionE xpired")); | 284 | sm.get String("au thenticato r.sessionE xpired")); | 284 | sm.get String("au thenticato r.sessionE xpired")); | |||||
| 280 | } else { | 285 | } else { | 285 | } else { | |||||
| 281 | // M ake the au thenticato r think th e user ori ginally re quested | 286 | // M ake the au thenticato r think th e user ori ginally re quested | 286 | // M ake the au thenticato r think th e user ori ginally re quested | |||||
| 282 | // t he landing page | 287 | // t he landing page | 287 | // t he landing page | |||||
| 283 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | 288 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | 288 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | |||||
| 284 | Save dRequest s aved = new SavedRequ est(); | 289 | Save dRequest s aved = new SavedRequ est(); | 289 | Save dRequest s aved = new SavedRequ est(); | |||||
| 285 | save d.setMetho d("GET"); | 290 | save d.setMetho d("GET"); | 290 | save d.setMetho d("GET"); | |||||
| 286 | save d.setReque stURI(uri) ; | 291 | save d.setReque stURI(uri) ; | 291 | save d.setReque stURI(uri) ; | |||||
| 287 | save d.setDecod edRequestU RI(uri); | 292 | save d.setDecod edRequestU RI(uri); | 292 | save d.setDecod edRequestU RI(uri); | |||||
| 288 | requ est.getSes sionIntern al(true).s etNote( | 293 | requ est.getSes sionIntern al(true).s etNote( | 293 | requ est.getSes sionIntern al(true).s etNote( | |||||
| 289 | Consta nts.FORM_R EQUEST_NOT E, saved); | 294 | Consta nts.FORM_R EQUEST_NOT E, saved); | 294 | Consta nts.FORM_R EQUEST_NOT E, saved); | |||||
| 290 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | 295 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | 295 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | |||||
| 291 | } | 296 | } | 296 | } | |||||
| 292 | return f alse; | 297 | return f alse; | 297 | return f alse; | |||||
| 293 | } | 298 | } | 298 | } | |||||
| 294 | 299 | 299 | ||||||||
| 295 | // Save the authentica ted Princi pal in our session | 300 | // Save the authentica ted Princi pal in our session | 300 | // Save the authentica ted Princi pal in our session | |||||
| 296 | se ssion.setN ote(Consta nts.FORM_P RINCIPAL_N OTE, princ ipal); | 301 | se ssion.setN ote(Consta nts.FORM_P RINCIPAL_N OTE, princ ipal); | 301 | se ssion.setN ote(Consta nts.FORM_P RINCIPAL_N OTE, princ ipal); | |||||
| 297 | 302 | 302 | ||||||||
| 298 | // Save the username a nd passwor d as well | 303 | // Save the username a nd passwor d as well | 303 | // Save the username a nd passwor d as well | |||||
| 299 | se ssion.setN ote(Consta nts.SESS_U SERNAME_NO TE, userna me); | 304 | se ssion.setN ote(Consta nts.SESS_U SERNAME_NO TE, userna me); | 304 | se ssion.setN ote(Consta nts.SESS_U SERNAME_NO TE, userna me); | |||||
| 300 | se ssion.setN ote(Consta nts.SESS_P ASSWORD_NO TE, passwo rd); | 305 | se ssion.setN ote(Consta nts.SESS_P ASSWORD_NO TE, passwo rd); | 305 | se ssion.setN ote(Consta nts.SESS_P ASSWORD_NO TE, passwo rd); | |||||
| 301 | 306 | 306 | ||||||||
| 302 | // Redirect the user t o the orig inal reque st URI (wh ich will c ause | 307 | // Redirect the user t o the orig inal reque st URI (wh ich will c ause | 307 | // Redirect the user t o the orig inal reque st URI (wh ich will c ause | |||||
| 303 | // the origi nal reques t to be re stored) | 308 | // the origi nal reques t to be re stored) | 308 | // the origi nal reques t to be re stored) | |||||
| 304 | re questURI = savedRequ estURL(ses sion); | 309 | re questURI = savedRequ estURL(ses sion); | 309 | re questURI = savedRequ estURL(ses sion); | |||||
| 305 | if (log.isDe bugEnabled ()) { | 310 | if (log.isDe bugEnabled ()) { | 310 | if (log.isDe bugEnabled ()) { | |||||
| 306 | log.debu g("Redirec ting to or iginal '" + requestU RI + "'"); | 311 | log.debu g("Redirec ting to or iginal '" + requestU RI + "'"); | 311 | log.debu g("Redirec ting to or iginal '" + requestU RI + "'"); | |||||
| 307 | } | 312 | } | 312 | } | |||||
| 308 | if (requestU RI == null ) { | 313 | if (requestU RI == null ) { | 313 | if (requestU RI == null ) { | |||||
| 309 | if (land ingPage == null) { | 314 | if (land ingPage == null) { | 314 | if (land ingPage == null) { | |||||
| 310 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST, | 315 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST, | 315 | resp onse.sendE rror(HttpS ervletResp onse.SC_BA D_REQUEST, | |||||
| 311 | sm.get String("au thenticato r.formlogi n")); | 316 | sm.get String("au thenticato r.formlogi n")); | 316 | sm.get String("au thenticato r.formlogi n")); | |||||
| 312 | } else { | 317 | } else { | 317 | } else { | |||||
| 313 | // M ake the au thenticato r think th e user ori ginally re quested | 318 | // M ake the au thenticato r think th e user ori ginally re quested | 318 | // M ake the au thenticato r think th e user ori ginally re quested | |||||
| 314 | // t he landing page | 319 | // t he landing page | 319 | // t he landing page | |||||
| 315 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | 320 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | 320 | Stri ng uri = r equest.get ContextPat h() + land ingPage; | |||||
| 316 | Save dRequest s aved = new SavedRequ est(); | 321 | Save dRequest s aved = new SavedRequ est(); | 321 | Save dRequest s aved = new SavedRequ est(); | |||||
| 317 | save d.setMetho d("GET"); | 322 | save d.setMetho d("GET"); | 322 | save d.setMetho d("GET"); | |||||
| 318 | save d.setReque stURI(uri) ; | 323 | save d.setReque stURI(uri) ; | 323 | save d.setReque stURI(uri) ; | |||||
| 319 | save d.setDecod edRequestU RI(uri); | 324 | save d.setDecod edRequestU RI(uri); | 324 | save d.setDecod edRequestU RI(uri); | |||||
| 320 | sess ion.setNot e(Constant s.FORM_REQ UEST_NOTE, saved); | 325 | sess ion.setNot e(Constant s.FORM_REQ UEST_NOTE, saved); | 325 | sess ion.setNot e(Constant s.FORM_REQ UEST_NOTE, saved); | |||||
| 321 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | 326 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | 326 | resp onse.sendR edirect(re sponse.enc odeRedirec tURL(uri)) ; | |||||
| 322 | } | 327 | } | 327 | } | |||||
| 323 | } else { | 328 | } else { | 328 | } else { | |||||
| 324 | // Until the Servl et API all ows specif ying the t ype of red irect to | 329 | // Until the Servl et API all ows specif ying the t ype of red irect to | 329 | // Until the Servl et API all ows specif ying the t ype of red irect to | |||||
| 325 | // use. | 330 | // use. | 330 | // use. | |||||
| 326 | Response internalR esponse = request.ge tResponse( ); | 331 | Response internalR esponse = request.ge tResponse( ); | 331 | Response internalR esponse = request.ge tResponse( ); | |||||
| 327 | String l ocation = response.e ncodeRedir ectURL(req uestURI); | 332 | String l ocation = response.e ncodeRedir ectURL(req uestURI); | 332 | String l ocation = response.e ncodeRedir ectURL(req uestURI); | |||||
| 328 | if ("HTT P/1.1".equ als(reques t.getProto col())) { | 333 | if ("HTT P/1.1".equ als(reques t.getProto col())) { | 333 | if ("HTT P/1.1".equ als(reques t.getProto col())) { | |||||
| 329 | inte rnalRespon se.sendRed irect(loca tion, | 334 | inte rnalRespon se.sendRed irect(loca tion, | 334 | inte rnalRespon se.sendRed irect(loca tion, | |||||
| 330 | HttpSe rvletRespo nse.SC_SEE _OTHER); | 335 | HttpSe rvletRespo nse.SC_SEE _OTHER); | 335 | HttpSe rvletRespo nse.SC_SEE _OTHER); | |||||
| 331 | } else { | 336 | } else { | 336 | } else { | |||||
| 332 | inte rnalRespon se.sendRed irect(loca tion, | 337 | inte rnalRespon se.sendRed irect(loca tion, | 337 | inte rnalRespon se.sendRed irect(loca tion, | |||||
| 333 | HttpSe rvletRespo nse.SC_FOU ND); | 338 | HttpSe rvletRespo nse.SC_FOU ND); | 338 | HttpSe rvletRespo nse.SC_FOU ND); | |||||
| 334 | } | 339 | } | 339 | } | |||||
| 335 | } | 340 | } | 340 | } | |||||
| 336 | re turn false ; | 341 | re turn false ; | 341 | re turn false ; | |||||
| 337 | 342 | 342 | ||||||||
| 338 | } | 343 | } | 343 | } | |||||
| 339 | 344 | 344 | ||||||||
| 340 | 345 | 345 | ||||||||
| 341 | @Overr ide | 346 | @Overr ide | 346 | @Overr ide | |||||
| 342 | protec ted String getAuthMe thod() { | 347 | protec ted boolea n isContin uationRequ ired(Reque st request ) { | 347 | protec ted boolea n isContin uationRequ ired(Reque st request ) { | |||||
| 343 | return Ht t pSe r vletReq ue st.FORM_AU TH ; | 348 | // Special h andling fo r form-bas ed logins to deal wi th the cas e | 348 | // Special h andling fo r form-bas ed logins to deal wi th the cas e | |||||
| 349 | // where the login for m (and the refore the "j_securi ty_check" URI | 349 | // where the login for m (and the refore the "j_securi ty_check" URI | |||||||
| 350 | // to which it submits ) might be outside t he secured area | 350 | // to which it submits ) might be outside t he secured area | |||||||
| 351 | St ring conte xtPath = t his.contex t.getPath( ); | 351 | St ring conte xtPath = t his.contex t.getPath( ); | |||||||
| 352 | St ring decod edRequestU RI = reque st.getDeco dedRequest URI(); | 352 | St ring decod edRequestU RI = reque st.getDeco dedRequest URI(); | |||||||
| 353 | if (decodedR equestURI. startsWith (contextPa th) && | 353 | if (decodedR equestURI. startsWith (contextPa th) && | |||||||
| 354 | deco dedRequest URI.endsWi th(Constan ts.FORM_AC TION)) { | 354 | deco dedRequest URI.endsWi th(Constan ts.FORM_AC TION)) { | |||||||
| 355 |
return
|
355 | return t rue; | |||||||
| 344 | } | 356 | } | 356 | } | |||||
| 345 | 357 | 357 | ||||||||
| 358 | // Special h andling fo r form-bas ed logins to deal wi th the cas e where | 358 | // Special h andling fo r form-bas ed logins to deal wi th the cas e where | |||||||
| 359 | // a resourc e is prote cted for s ome HTTP m ethods but not prote cted for | 359 | // a resourc e is prote cted for s ome HTTP m ethods but not prote cted for | |||||||
| 360 | // GET which is used a fter authe ntication when redir ecting to the | 360 | // GET which is used a fter authe ntication when redir ecting to the | |||||||
| 361 | // protected resource. | 361 | // protected resource. | |||||||
| 362 | // TODO: Thi s is simil ar to the FormAuthen ticator.ma tchRequest () logic | 362 | // TODO: Thi s is simil ar to the FormAuthen ticator.ma tchRequest () logic | |||||||
| 363 | // Is there a way to r emove the duplicatio n? | 363 | // Is there a way to r emove the duplicatio n? | |||||||
| 364 | Se ssion sess ion = requ est.getSes sionIntern al(false); | 364 | Se ssion sess ion = requ est.getSes sionIntern al(false); | |||||||
| 365 | if (session != null) { | 365 | if (session != null) { | |||||||
| 366 | SavedReq uest saved Request = (SavedRequ est) sessi on.getNote (Constants .FORM_REQU EST_NOTE); | 366 | SavedReq uest saved Request = (SavedRequ est) sessi on.getNote (Constants .FORM_REQU EST_NOTE); | |||||||
| 367 | if (save dRequest ! = null && | 367 | if (save dRequest ! = null && | |||||||
| 368 | decodedReq uestURI.eq uals(saved Request.ge tDecodedRe questURI() )) { | 368 | decodedReq uestURI.eq uals(saved Request.ge tDecodedRe questURI() )) { | |||||||
| 369 | retu rn true; | 369 | retu rn true; | |||||||
| 370 | } | 370 | } | |||||||
| 371 | } | 371 | } | |||||||
| 346 | 372 | 372 | ||||||||
| 347 | // --- ---------- ---------- ---------- ---------- ---------- - Protecte d Methods | 373 | re turn false ; | 373 | re turn false ; | |||||
| 374 | } | 374 | } | |||||||
| 375 | 375 | |||||||||
| 376 | 376 | |||||||||
| 377 | @Overr ide | 377 | @Overr ide | |||||||
| 378 | protec ted String getAuthMe thod() { | 378 | protec ted String getAuthMe thod() { | |||||||
| 379 | re turn HttpS ervletRequ est.FORM_A UTH; | 379 | re turn HttpS ervletRequ est.FORM_A UTH; | |||||||
| 380 | } | 380 | } | |||||||
| 348 | 381 | 381 | ||||||||
| 349 | 382 | 382 | ||||||||
| 350 | /** | 383 | /** | 383 | /** | |||||
| 351 | * Cal led to for ward to th e login pa ge | 384 | * Cal led to for ward to th e login pa ge | 384 | * Cal led to for ward to th e login pa ge | |||||
| 352 | * | 385 | * | 385 | * | |||||
| 353 | * @pa ram reques t Request we are pro cessing | 386 | * @pa ram reques t Request we are pro cessing | 386 | * @pa ram reques t Request we are pro cessing | |||||
| 354 | * @pa ram respon se Respons e we are p opulating | 387 | * @pa ram respon se Respons e we are p opulating | 387 | * @pa ram respon se Respons e we are p opulating | |||||
| 355 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | 388 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | 388 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | |||||
| 356 | * should be performed | 389 | * should be performed | 389 | * should be performed | |||||
| 357 | * @th rows IOExc eption If the forwa rd to the login page fails and the call | 390 | * @th rows IOExc eption If the forwa rd to the login page fails and the call | 390 | * @th rows IOExc eption If the forwa rd to the login page fails and the call | |||||
| 358 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | 391 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | 391 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | |||||
| 359 | * th rows an {@ link IOExc eption} | 392 | * th rows an {@ link IOExc eption} | 392 | * th rows an {@ link IOExc eption} | |||||
| 360 | */ | 393 | */ | 393 | */ | |||||
| 361 | protec ted void f orwardToLo ginPage(Re quest requ est, | 394 | protec ted void f orwardToLo ginPage(Re quest requ est, | 394 | protec ted void f orwardToLo ginPage(Re quest requ est, | |||||
| 362 | HttpServ letRespons e response , LoginCon fig config ) | 395 | HttpServ letRespons e response , LoginCon fig config ) | 395 | HttpServ letRespons e response , LoginCon fig config ) | |||||
| 363 | throws I OException { | 396 | throws I OException { | 396 | throws I OException { | |||||
| 364 | 397 | 397 | ||||||||
| 365 | if (log.isDe bugEnabled ()) { | 398 | if (log.isDe bugEnabled ()) { | 398 | if (log.isDe bugEnabled ()) { | |||||
| 366 | log.debu g(sm.getSt ring("form Authentica tor.forwar dLogin", | 399 | log.debu g(sm.getSt ring("form Authentica tor.forwar dLogin", | 399 | log.debu g(sm.getSt ring("form Authentica tor.forwar dLogin", | |||||
| 367 | request.ge tRequestUR I(), reque st.getMeth od(), | 400 | request.ge tRequestUR I(), reque st.getMeth od(), | 400 | request.ge tRequestUR I(), reque st.getMeth od(), | |||||
| 368 | config.get LoginPage( ), context .getName() )); | 401 | config.get LoginPage( ), context .getName() )); | 401 | config.get LoginPage( ), context .getName() )); | |||||
| 369 | } | 402 | } | 402 | } | |||||
| 370 | 403 | 403 | ||||||||
| 371 | St ring login Page = con fig.getLog inPage(); | 404 | St ring login Page = con fig.getLog inPage(); | 404 | St ring login Page = con fig.getLog inPage(); | |||||
| 372 | if (loginPag e == null || loginPa ge.length( ) == 0) { | 405 | if (loginPag e == null || loginPa ge.length( ) == 0) { | 405 | if (loginPag e == null || loginPa ge.length( ) == 0) { | |||||
| 373 | String m sg = sm.ge tString("f ormAuthent icator.noL oginPage", | 406 | String m sg = sm.ge tString("f ormAuthent icator.noL oginPage", | 406 | String m sg = sm.ge tString("f ormAuthent icator.noL oginPage", | |||||
| 374 | context.ge tName()); | 407 | context.ge tName()); | 407 | context.ge tName()); | |||||
| 375 | log.warn (msg); | 408 | log.warn (msg); | 408 | log.warn (msg); | |||||
| 376 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 409 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 409 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | |||||
| 377 | msg); | 410 | msg); | 410 | msg); | |||||
| 378 | return; | 411 | return; | 411 | return; | |||||
| 379 | } | 412 | } | 412 | } | |||||
| 380 | 413 | 413 | ||||||||
| 381 | if (getChang eSessionId OnAuthenti cation()) { | 414 | if (getChang eSessionId OnAuthenti cation()) { | 414 | if (getChang eSessionId OnAuthenti cation()) { | |||||
| 382 | Session session = request.ge tSessionIn ternal(fal se); | 415 | Session session = request.ge tSessionIn ternal(fal se); | 415 | Session session = request.ge tSessionIn ternal(fal se); | |||||
| 383 | if (sess ion != nul l) { | 416 | if (sess ion != nul l) { | 416 | if (sess ion != nul l) { | |||||
| 384 | Mana ger manage r = reques t.getConte xt().getMa nager(); | 417 | Mana ger manage r = reques t.getConte xt().getMa nager(); | 417 | Mana ger manage r = reques t.getConte xt().getMa nager(); | |||||
| 385 | mana ger.change SessionId( session); | 418 | mana ger.change SessionId( session); | 418 | mana ger.change SessionId( session); | |||||
| 386 | requ est.change SessionId( session.ge tId()); | 419 | requ est.change SessionId( session.ge tId()); | 419 | requ est.change SessionId( session.ge tId()); | |||||
| 387 | } | 420 | } | 420 | } | |||||
| 388 | } | 421 | } | 421 | } | |||||
| 389 | 422 | 422 | ||||||||
| 390 | // Always us e GET for the login page, rega rdless of the method used | 423 | // Always us e GET for the login page, rega rdless of the method used | 423 | // Always us e GET for the login page, rega rdless of the method used | |||||
| 391 | St ring oldMe thod = req uest.getMe thod(); | 424 | St ring oldMe thod = req uest.getMe thod(); | 424 | St ring oldMe thod = req uest.getMe thod(); | |||||
| 392 | re quest.getC oyoteReque st().metho d().setStr ing("GET") ; | 425 | re quest.getC oyoteReque st().metho d().setStr ing("GET") ; | 425 | re quest.getC oyoteReque st().metho d().setStr ing("GET") ; | |||||
| 393 | 426 | 426 | ||||||||
| 394 | Re questDispa tcher disp = | 427 | Re questDispa tcher disp = | 427 | Re questDispa tcher disp = | |||||
| 395 | context. getServlet Context(). getRequest Dispatcher (loginPage ); | 428 | context. getServlet Context(). getRequest Dispatcher (loginPage ); | 428 | context. getServlet Context(). getRequest Dispatcher (loginPage ); | |||||
| 396 | tr y { | 429 | tr y { | 429 | tr y { | |||||
| 397 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | 430 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | 430 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | |||||
| 398 | disp .forward(r equest.get Request(), response) ; | 431 | disp .forward(r equest.get Request(), response) ; | 431 | disp .forward(r equest.get Request(), response) ; | |||||
| 399 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | 432 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | 432 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | |||||
| 400 | } | 433 | } | 433 | } | |||||
| 401 | } catch (Thr owable t) { | 434 | } catch (Thr owable t) { | 434 | } catch (Thr owable t) { | |||||
| 402 | Exceptio nUtils.han dleThrowab le(t); | 435 | Exceptio nUtils.han dleThrowab le(t); | 435 | Exceptio nUtils.han dleThrowab le(t); | |||||
| 403 | String m sg = sm.ge tString("f ormAuthent icator.for wardLoginF ail"); | 436 | String m sg = sm.ge tString("f ormAuthent icator.for wardLoginF ail"); | 436 | String m sg = sm.ge tString("f ormAuthent icator.for wardLoginF ail"); | |||||
| 404 | log.warn (msg, t); | 437 | log.warn (msg, t); | 437 | log.warn (msg, t); | |||||
| 405 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | 438 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | 438 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | |||||
| 406 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 439 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 439 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | |||||
| 407 | msg); | 440 | msg); | 440 | msg); | |||||
| 408 | } finally { | 441 | } finally { | 441 | } finally { | |||||
| 409 | // Resto re origina l method s o that it is written into acce ss log | 442 | // Resto re origina l method s o that it is written into acce ss log | 442 | // Resto re origina l method s o that it is written into acce ss log | |||||
| 410 | request. getCoyoteR equest().m ethod().se tString(ol dMethod); | 443 | request. getCoyoteR equest().m ethod().se tString(ol dMethod); | 443 | request. getCoyoteR equest().m ethod().se tString(ol dMethod); | |||||
| 411 | } | 444 | } | 444 | } | |||||
| 412 | } | 445 | } | 445 | } | |||||
| 413 | 446 | 446 | ||||||||
| 414 | 447 | 447 | ||||||||
| 415 | /** | 448 | /** | 448 | /** | |||||
| 416 | * Cal led to for ward to th e error pa ge | 449 | * Cal led to for ward to th e error pa ge | 449 | * Cal led to for ward to th e error pa ge | |||||
| 417 | * | 450 | * | 450 | * | |||||
| 418 | * @pa ram reques t Request we are pro cessing | 451 | * @pa ram reques t Request we are pro cessing | 451 | * @pa ram reques t Request we are pro cessing | |||||
| 419 | * @pa ram respon se Respons e we are p opulating | 452 | * @pa ram respon se Respons e we are p opulating | 452 | * @pa ram respon se Respons e we are p opulating | |||||
| 420 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | 453 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | 453 | * @pa ram config Login configurat ion descri bing how a uthenticat ion | |||||
| 421 | * should be performed | 454 | * should be performed | 454 | * should be performed | |||||
| 422 | * @th rows IOExc eption If the forwa rd to the error page fails and the call | 455 | * @th rows IOExc eption If the forwa rd to the error page fails and the call | 455 | * @th rows IOExc eption If the forwa rd to the error page fails and the call | |||||
| 423 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | 456 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | 456 | * to {@link Ht tpServletR esponse#se ndError(in t, String) } | |||||
| 424 | * th rows an {@ link IOExc eption} | 457 | * th rows an {@ link IOExc eption} | 457 | * th rows an {@ link IOExc eption} | |||||
| 425 | */ | 458 | */ | 458 | */ | |||||
| 426 | protec ted void f orwardToEr rorPage(Re quest requ est, | 459 | protec ted void f orwardToEr rorPage(Re quest requ est, | 459 | protec ted void f orwardToEr rorPage(Re quest requ est, | |||||
| 427 | HttpServ letRespons e response , LoginCon fig config ) | 460 | HttpServ letRespons e response , LoginCon fig config ) | 460 | HttpServ letRespons e response , LoginCon fig config ) | |||||
| 428 | throws I OException { | 461 | throws I OException { | 461 | throws I OException { | |||||
| 429 | 462 | 462 | ||||||||
| 430 | St ring error Page = con fig.getErr orPage(); | 463 | St ring error Page = con fig.getErr orPage(); | 463 | St ring error Page = con fig.getErr orPage(); | |||||
| 431 | if (errorPag e == null || errorPa ge.length( ) == 0) { | 464 | if (errorPag e == null || errorPa ge.length( ) == 0) { | 464 | if (errorPag e == null || errorPa ge.length( ) == 0) { | |||||
| 432 | String m sg = sm.ge tString("f ormAuthent icator.noE rrorPage", | 465 | String m sg = sm.ge tString("f ormAuthent icator.noE rrorPage", | 465 | String m sg = sm.ge tString("f ormAuthent icator.noE rrorPage", | |||||
| 433 | context.ge tName()); | 466 | context.ge tName()); | 466 | context.ge tName()); | |||||
| 434 | log.warn (msg); | 467 | log.warn (msg); | 467 | log.warn (msg); | |||||
| 435 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 468 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 468 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | |||||
| 436 | msg); | 469 | msg); | 469 | msg); | |||||
| 437 | return; | 470 | return; | 470 | return; | |||||
| 438 | } | 471 | } | 471 | } | |||||
| 439 | 472 | 472 | ||||||||
| 440 | Re questDispa tcher disp = | 473 | Re questDispa tcher disp = | 473 | Re questDispa tcher disp = | |||||
| 441 | cont ext.getSer vletContex t().getReq uestDispat cher(confi g.getError Page()); | 474 | cont ext.getSer vletContex t().getReq uestDispat cher(confi g.getError Page()); | 474 | cont ext.getSer vletContex t().getReq uestDispat cher(confi g.getError Page()); | |||||
| 442 | tr y { | 475 | tr y { | 475 | tr y { | |||||
| 443 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | 476 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | 476 | if (cont ext.fireRe questInitE vent(reque st.getRequ est())) { | |||||
| 444 | disp .forward(r equest.get Request(), response) ; | 477 | disp .forward(r equest.get Request(), response) ; | 477 | disp .forward(r equest.get Request(), response) ; | |||||
| 445 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | 478 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | 478 | cont ext.fireRe questDestr oyEvent(re quest.getR equest()); | |||||
| 446 | } | 479 | } | 479 | } | |||||
| 447 | } catch (Thr owable t) { | 480 | } catch (Thr owable t) { | 480 | } catch (Thr owable t) { | |||||
| 448 | Exceptio nUtils.han dleThrowab le(t); | 481 | Exceptio nUtils.han dleThrowab le(t); | 481 | Exceptio nUtils.han dleThrowab le(t); | |||||
| 449 | String m sg = sm.ge tString("f ormAuthent icator.for wardErrorF ail"); | 482 | String m sg = sm.ge tString("f ormAuthent icator.for wardErrorF ail"); | 482 | String m sg = sm.ge tString("f ormAuthent icator.for wardErrorF ail"); | |||||
| 450 | log.warn (msg, t); | 483 | log.warn (msg, t); | 483 | log.warn (msg, t); | |||||
| 451 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | 484 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | 484 | request. setAttribu te(Request Dispatcher .ERROR_EXC EPTION, t) ; | |||||
| 452 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 485 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | 485 | response .sendError (HttpServl etResponse .SC_INTERN AL_SERVER_ ERROR, | |||||
| 453 | msg); | 486 | msg); | 486 | msg); | |||||
| 454 | } | 487 | } | 487 | } | |||||
| 455 | } | 488 | } | 488 | } | |||||
| 456 | 489 | 489 | ||||||||
| 457 | 490 | 490 | ||||||||
| 458 | /** | 491 | /** | 491 | /** | |||||
| 459 | * Doe s this req uest match the saved one (so t hat it mus t be the r edirect | 492 | * Doe s this req uest match the saved one (so t hat it mus t be the r edirect | 492 | * Doe s this req uest match the saved one (so t hat it mus t be the r edirect | |||||
| 460 | * we signaled a fter succe ssful auth entication ? | 493 | * we signaled a fter succe ssful auth entication ? | 493 | * we signaled a fter succe ssful auth entication ? | |||||
| 461 | * | 494 | * | 494 | * | |||||
| 462 | * @pa ram reques t The requ est to be verified | 495 | * @pa ram reques t The requ est to be verified | 495 | * @pa ram reques t The requ est to be verified | |||||
| 496 | * @re turn <code >true</cod e> if the requests m atched the saved one | 496 | * @re turn <code >true</cod e> if the requests m atched the saved one | |||||||
| 463 | */ | 497 | */ | 497 | */ | |||||
| 464 | protec ted boolea n matchReq uest(Reque st request ) { | 498 | protec ted boolea n matchReq uest(Reque st request ) { | 498 | protec ted boolea n matchReq uest(Reque st request ) { | |||||
| 465 | // Has a ses sion been created? | 499 | // Has a ses sion been created? | 499 | // Has a ses sion been created? | |||||
| 466 | Se ssion sess ion = requ est.getSes sionIntern al(false); | 500 | Se ssion sess ion = requ est.getSes sionIntern al(false); | 500 | Se ssion sess ion = requ est.getSes sionIntern al(false); | |||||
| 467 | if (session == null) { | 501 | if (session == null) { | 501 | if (session == null) { | |||||
| 468 | return f alse; | 502 | return f alse; | 502 | return f alse; | |||||
| 469 | } | 503 | } | 503 | } | |||||
| 470 | 504 | 504 | ||||||||
| 471 | // Is there a saved re quest? | 505 | // Is there a saved re quest? | 505 | // Is there a saved re quest? | |||||
| 472 | Sa vedRequest sreq = | 506 | Sa vedRequest sreq = | 506 | Sa vedRequest sreq = | |||||
| 473 | (Sav edRequest) session.g etNote(Con stants.FOR M_REQUEST_ NOTE); | 507 | (Sav edRequest) session.g etNote(Con stants.FOR M_REQUEST_ NOTE); | 507 | (Sav edRequest) session.g etNote(Con stants.FOR M_REQUEST_ NOTE); | |||||
| 474 | if (sreq == null) { | 508 | if (sreq == null) { | 508 | if (sreq == null) { | |||||
| 475 | return f alse; | 509 | return f alse; | 509 | return f alse; | |||||
| 476 | } | 510 | } | 510 | } | |||||
| 477 | 511 | 511 | ||||||||
| 478 | // Is there a saved pr incipal? | 512 | // Is there a saved pr incipal? | 512 | // Is there a saved pr incipal? | |||||
| 479 | if (session. getNote(Co nstants.FO RM_PRINCIP AL_NOTE) = = null) { | 513 | if (session. getNote(Co nstants.FO RM_PRINCIP AL_NOTE) = = null) { | 513 | if (session. getNote(Co nstants.FO RM_PRINCIP AL_NOTE) = = null) { | |||||
| 480 | return f alse; | 514 | return f alse; | 514 | return f alse; | |||||
| 481 | } | 515 | } | 515 | } | |||||
| 482 | 516 | 516 | ||||||||
| 483 | // Does the request UR I match? | 517 | // Does the request UR I match? | 517 | // Does the request UR I match? | |||||
| 484 | St ring decod edRequestU RI = reque st.getDeco dedRequest URI(); | 518 | St ring decod edRequestU RI = reque st.getDeco dedRequest URI(); | 518 | St ring decod edRequestU RI = reque st.getDeco dedRequest URI(); | |||||
| 485 | if (decodedR equestURI == null) { | 519 | if (decodedR equestURI == null) { | 519 | if (decodedR equestURI == null) { | |||||
| 486 | return f alse; | 520 | return f alse; | 520 | return f alse; | |||||
| 487 | } | 521 | } | 521 | } | |||||
| 488 | re turn decod edRequestU RI.equals( sreq.getDe codedReque stURI()); | 522 | re turn decod edRequestU RI.equals( sreq.getDe codedReque stURI()); | 522 | re turn decod edRequestU RI.equals( sreq.getDe codedReque stURI()); | |||||
| 489 | } | 523 | } | 523 | } | |||||
| 490 | 524 | 524 | ||||||||
| 491 | 525 | 525 | ||||||||
| 492 | /** | 526 | /** | 526 | /** | |||||
| 493 | * Res tore the o riginal re quest from informati on stored in our ses sion. | 527 | * Res tore the o riginal re quest from informati on stored in our ses sion. | 527 | * Res tore the o riginal re quest from informati on stored in our ses sion. | |||||
| 494 | * If the origin al request is no lon ger presen t (because the sessi on | 528 | * If the origin al request is no lon ger presen t (because the sessi on | 528 | * If the origin al request is no lon ger presen t (because the sessi on | |||||
| 495 | * tim ed out), r eturn <cod e>false</c ode>; othe rwise, ret urn | 529 | * tim ed out), r eturn <cod e>false</c ode>; othe rwise, ret urn | 529 | * tim ed out), r eturn <cod e>false</c ode>; othe rwise, ret urn | |||||
| 496 | * <co de>true</c ode>. | 530 | * <co de>true</c ode>. | 530 | * <co de>true</c ode>. | |||||
| 497 | * | 531 | * | 531 | * | |||||
| 498 | * @pa ram reques t The requ est to be restored | 532 | * @pa ram reques t The requ est to be restored | 532 | * @pa ram reques t The requ est to be restored | |||||
| 499 | * @pa ram sessio n The sess ion contai ning the s aved infor mation | 533 | * @pa ram sessio n The sess ion contai ning the s aved infor mation | 533 | * @pa ram sessio n The sess ion contai ning the s aved infor mation | |||||
| 534 | * @re turn <code >true</cod e> if the request wa s successf ully resto red | 534 | * @re turn <code >true</cod e> if the request wa s successf ully resto red | |||||||
| 535 | * @th rows IOExc eption if an IO erro r occurred during th e process | 535 | * @th rows IOExc eption if an IO erro r occurred during th e process | |||||||
| 500 | */ | 536 | */ | 536 | */ | |||||
| 501 | protec ted boolea n restoreR equest(Req uest reque st, Sessio n session) | 537 | protec ted boolea n restoreR equest(Req uest reque st, Sessio n session) | 537 | protec ted boolea n restoreR equest(Req uest reque st, Sessio n session) | |||||
| 502 | throws I OException { | 538 | throws I OException { | 538 | throws I OException { | |||||
| 503 | 539 | 539 | ||||||||
| 504 | // Retrieve and remove the Saved Request ob ject from our sessio n | 540 | // Retrieve and remove the Saved Request ob ject from our sessio n | 540 | // Retrieve and remove the Saved Request ob ject from our sessio n | |||||
| 505 | Sa vedRequest saved = ( SavedReque st) | 541 | Sa vedRequest saved = ( SavedReque st) | 541 | Sa vedRequest saved = ( SavedReque st) | |||||
| 506 | session. getNote(Co nstants.FO RM_REQUEST _NOTE); | 542 | session. getNote(Co nstants.FO RM_REQUEST _NOTE); | 542 | session. getNote(Co nstants.FO RM_REQUEST _NOTE); | |||||
| 507 | se ssion.remo veNote(Con stants.FOR M_REQUEST_ NOTE); | 543 | se ssion.remo veNote(Con stants.FOR M_REQUEST_ NOTE); | 543 | se ssion.remo veNote(Con stants.FOR M_REQUEST_ NOTE); | |||||
| 508 | se ssion.remo veNote(Con stants.FOR M_PRINCIPA L_NOTE); | 544 | se ssion.remo veNote(Con stants.FOR M_PRINCIPA L_NOTE); | 544 | se ssion.remo veNote(Con stants.FOR M_PRINCIPA L_NOTE); | |||||
| 509 | if (saved == null) { | 545 | if (saved == null) { | 545 | if (saved == null) { | |||||
| 510 | return f alse; | 546 | return f alse; | 546 | return f alse; | |||||
| 511 | } | 547 | } | 547 | } | |||||
| 512 | 548 | 548 | ||||||||
| 513 | // Swallow a ny request body sinc e we will be replaci ng it | 549 | // Swallow a ny request body sinc e we will be replaci ng it | 549 | // Swallow a ny request body sinc e we will be replaci ng it | |||||
| 514 | // Need to d o this bef ore header s are rest ored as AJ P connecto r uses | 550 | // Need to d o this bef ore header s are rest ored as AJ P connecto r uses | 550 | // Need to d o this bef ore header s are rest ored as AJ P connecto r uses | |||||
| 515 | // content l ength head er to dete rmine how much data needs to b e read for | 551 | // content l ength head er to dete rmine how much data needs to b e read for | 551 | // content l ength head er to dete rmine how much data needs to b e read for | |||||
| 516 | // request b ody | 552 | // request b ody | 552 | // request b ody | |||||
| 517 | by te[] buffe r = new by te[4096]; | 553 | by te[] buffe r = new by te[4096]; | 553 | by te[] buffe r = new by te[4096]; | |||||
| 518 | In putStream is = reque st.createI nputStream (); | 554 | In putStream is = reque st.createI nputStream (); | 554 | In putStream is = reque st.createI nputStream (); | |||||
| 519 | wh ile (is.re ad(buffer) >= 0) { | 555 | wh ile (is.re ad(buffer) >= 0) { | 555 | wh ile (is.re ad(buffer) >= 0) { | |||||
| 520 | // Ignor e request body | 556 | // Ignor e request body | 556 | // Ignor e request body | |||||
| 521 | } | 557 | } | 557 | } | |||||
| 522 | 558 | 558 | ||||||||
| 523 | // Modify ou r current request to reflect t he origina l one | 559 | // Modify ou r current request to reflect t he origina l one | 559 | // Modify ou r current request to reflect t he origina l one | |||||
| 524 | re quest.clea rCookies() ; | 560 | re quest.clea rCookies() ; | 560 | re quest.clea rCookies() ; | |||||
| 525 | It erator<Coo kie> cooki es = saved .getCookie s(); | 561 | It erator<Coo kie> cooki es = saved .getCookie s(); | 561 | It erator<Coo kie> cooki es = saved .getCookie s(); | |||||
| 526 | wh ile (cooki es.hasNext ()) { | 562 | wh ile (cooki es.hasNext ()) { | 562 | wh ile (cooki es.hasNext ()) { | |||||
| 527 | request. addCookie( cookies.ne xt()); | 563 | request. addCookie( cookies.ne xt()); | 563 | request. addCookie( cookies.ne xt()); | |||||
| 528 | } | 564 | } | 564 | } | |||||
| 529 | 565 | 565 | ||||||||
| 530 | St ring metho d = saved. getMethod( ); | 566 | St ring metho d = saved. getMethod( ); | 566 | St ring metho d = saved. getMethod( ); | |||||
| 531 | Mi meHeaders rmh = requ est.getCoy oteRequest ().getMime Headers(); | 567 | Mi meHeaders rmh = requ est.getCoy oteRequest ().getMime Headers(); | 567 | Mi meHeaders rmh = requ est.getCoy oteRequest ().getMime Headers(); | |||||
| 532 | rm h.recycle( ); | 568 | rm h.recycle( ); | 568 | rm h.recycle( ); | |||||
| 533 | bo olean cach eable = "G ET".equals IgnoreCase (method) | | | 569 | bo olean cach eable = "G ET".equals IgnoreCase (method) | | | 569 | bo olean cach eable = "G ET".equals IgnoreCase (method) | | | |||||
| 534 | "HE AD".equals IgnoreCase (method); | 570 | "HE AD".equals IgnoreCase (method); | 570 | "HE AD".equals IgnoreCase (method); | |||||
| 535 | It erator<Str ing> names = saved.g etHeaderNa mes(); | 571 | It erator<Str ing> names = saved.g etHeaderNa mes(); | 571 | It erator<Str ing> names = saved.g etHeaderNa mes(); | |||||
| 536 | wh ile (names .hasNext() ) { | 572 | wh ile (names .hasNext() ) { | 572 | wh ile (names .hasNext() ) { | |||||
| 537 | String n ame = name s.next(); | 573 | String n ame = name s.next(); | 573 | String n ame = name s.next(); | |||||
| 538 | // The b rowser isn 't expecti ng this co nditional response n ow. | 574 | // The b rowser isn 't expecti ng this co nditional response n ow. | 574 | // The b rowser isn 't expecti ng this co nditional response n ow. | |||||
| 539 | // Assum ing that i t can quie tly recove r from an unexpected 412. | 575 | // Assum ing that i t can quie tly recove r from an unexpected 412. | 575 | // Assum ing that i t can quie tly recove r from an unexpected 412. | |||||
| 540 | // BZ 43 687 | 576 | // BZ 43 687 | 576 | // BZ 43 687 | |||||
| 541 | if(!("If -Modified- Since".equ alsIgnoreC ase(name) || | 577 | if(!("If -Modified- Since".equ alsIgnoreC ase(name) || | 577 | if(!("If -Modified- Since".equ alsIgnoreC ase(name) || | |||||
| 542 | (ca cheable && "If-None- Match".equ alsIgnoreC ase(name)) )) { | 578 | (ca cheable && "If-None- Match".equ alsIgnoreC ase(name)) )) { | 578 | (ca cheable && "If-None- Match".equ alsIgnoreC ase(name)) )) { | |||||
| 543 | Iter ator<Strin g> values = saved.ge tHeaderVal ues(name); | 579 | Iter ator<Strin g> values = saved.ge tHeaderVal ues(name); | 579 | Iter ator<Strin g> values = saved.ge tHeaderVal ues(name); | |||||
| 544 | whil e (values. hasNext()) { | 580 | whil e (values. hasNext()) { | 580 | whil e (values. hasNext()) { | |||||
| 545 | rmh.addVal ue(name).s etString(v alues.next ()); | 581 | rmh.addVal ue(name).s etString(v alues.next ()); | 581 | rmh.addVal ue(name).s etString(v alues.next ()); | |||||
| 546 | } | 582 | } | 582 | } | |||||
| 547 | } | 583 | } | 583 | } | |||||
| 548 | } | 584 | } | 584 | } | |||||
| 549 | 585 | 585 | ||||||||
| 550 | re quest.clea rLocales() ; | 586 | re quest.clea rLocales() ; | 586 | re quest.clea rLocales() ; | |||||
| 551 | It erator<Loc ale> local es = saved .getLocale s(); | 587 | It erator<Loc ale> local es = saved .getLocale s(); | 587 | It erator<Loc ale> local es = saved .getLocale s(); | |||||
| 552 | wh ile (local es.hasNext ()) { | 588 | wh ile (local es.hasNext ()) { | 588 | wh ile (local es.hasNext ()) { | |||||
| 553 | request. addLocale( locales.ne xt()); | 589 | request. addLocale( locales.ne xt()); | 589 | request. addLocale( locales.ne xt()); | |||||
| 554 | } | 590 | } | 590 | } | |||||
| 555 | 591 | 591 | ||||||||
| 556 | re quest.getC oyoteReque st().getPa rameters() .recycle() ; | 592 | re quest.getC oyoteReque st().getPa rameters() .recycle() ; | 592 | re quest.getC oyoteReque st().getPa rameters() .recycle() ; | |||||
| 557 | re quest.getC oyoteReque st().getPa rameters() .setQueryS tringEncod ing( | |||||||||
| 558 | requ est.getCon nector().g etURIEncod ing()); | |||||||||
| 559 | 593 | 593 | ||||||||
| 560 | By teChunk bo dy = saved .getBody() ; | 594 | By teChunk bo dy = saved .getBody() ; | 594 | By teChunk bo dy = saved .getBody() ; | |||||
| 561 | 595 | 595 | ||||||||
| 562 | if (body != null) { | 596 | if (body != null) { | 596 | if (body != null) { | |||||
| 563 | request. getCoyoteR equest().a ction | 597 | request. getCoyoteR equest().a ction | 597 | request. getCoyoteR equest().a ction | |||||
| 564 | (Act ionCode.RE Q_SET_BODY _REPLAY, b ody); | 598 | (Act ionCode.RE Q_SET_BODY _REPLAY, b ody); | 598 | (Act ionCode.RE Q_SET_BODY _REPLAY, b ody); | |||||
| 565 | 599 | 599 | ||||||||
| 566 | // Set c ontent typ e | 600 | // Set c ontent typ e | 600 | // Set c ontent typ e | |||||
| 567 | MessageB ytes conte ntType = M essageByte s.newInsta nce(); | 601 | MessageB ytes conte ntType = M essageByte s.newInsta nce(); | 601 | MessageB ytes conte ntType = M essageByte s.newInsta nce(); | |||||
| 568 | 602 | 602 | ||||||||
| 569 | // If no content t ype specif ied, use d efault for POST | 603 | // If no content t ype specif ied, use d efault for POST | 603 | // If no content t ype specif ied, use d efault for POST | |||||
| 570 | String s avedConten tType = sa ved.getCon tentType() ; | 604 | String s avedConten tType = sa ved.getCon tentType() ; | 604 | String s avedConten tType = sa ved.getCon tentType() ; | |||||
| 571 | if (save dContentTy pe == null && "POST" .equalsIgn oreCase(me thod)) { | 605 | if (save dContentTy pe == null && "POST" .equalsIgn oreCase(me thod)) { | 605 | if (save dContentTy pe == null && "POST" .equalsIgn oreCase(me thod)) { | |||||
| 572 | save dContentTy pe = "appl ication/x- www-form-u rlencoded" ; | 606 | save dContentTy pe = "appl ication/x- www-form-u rlencoded" ; | 606 | save dContentTy pe = "appl ication/x- www-form-u rlencoded" ; | |||||
| 573 | } | 607 | } | 607 | } | |||||
| 574 | 608 | 608 | ||||||||
| 575 | contentT ype.setStr ing(savedC ontentType ); | 609 | contentT ype.setStr ing(savedC ontentType ); | 609 | contentT ype.setStr ing(savedC ontentType ); | |||||
| 576 | request. getCoyoteR equest().s etContentT ype(conten tType); | 610 | request. getCoyoteR equest().s etContentT ype(conten tType); | 610 | request. getCoyoteR equest().s etContentT ype(conten tType); | |||||
| 577 | } | 611 | } | 611 | } | |||||
| 578 | 612 | 612 | ||||||||
| 579 | re quest.getC oyoteReque st().metho d().setStr ing(method ); | 613 | re quest.getC oyoteReque st().metho d().setStr ing(method ); | 613 | re quest.getC oyoteReque st().metho d().setStr ing(method ); | |||||
| 580 | 614 | 614 | ||||||||
| 581 | re turn true; | 615 | re turn true; | 615 | re turn true; | |||||
| 582 | } | 616 | } | 616 | } | |||||
| 583 | 617 | 617 | ||||||||
| 584 | 618 | 618 | ||||||||
| 585 | /** | 619 | /** | 619 | /** | |||||
| 586 | * Sav e the orig inal reque st informa tion into our sessio n. | 620 | * Sav e the orig inal reque st informa tion into our sessio n. | 620 | * Sav e the orig inal reque st informa tion into our sessio n. | |||||
| 587 | * | 621 | * | 621 | * | |||||
| 588 | * @pa ram reques t The requ est to be saved | 622 | * @pa ram reques t The requ est to be saved | 622 | * @pa ram reques t The requ est to be saved | |||||
| 589 | * @pa ram sessio n The sess ion to con tain the s aved infor mation | 623 | * @pa ram sessio n The sess ion to con tain the s aved infor mation | 623 | * @pa ram sessio n The sess ion to con tain the s aved infor mation | |||||
| 590 |
* @throws
IOExceptio
n
|
624 | * @throws IOExceptio n if an IO error occu rred durin g the proc ess | 624 | * @th rows IOExc eption if an IO erro r occurred during th e process | |||||
| 591 | */ | 625 | */ | 625 | */ | |||||
| 592 | protec ted void s aveRequest (Request r equest, Se ssion sess ion) | 626 | protec ted void s aveRequest (Request r equest, Se ssion sess ion) | 626 | protec ted void s aveRequest (Request r equest, Se ssion sess ion) | |||||
| 593 | th rows IOExc eption { | 627 | th rows IOExc eption { | 627 | th rows IOExc eption { | |||||
| 594 | 628 | 628 | ||||||||
| 595 | // Create an d populate a SavedRe quest obje ct for thi s request | 629 | // Create an d populate a SavedRe quest obje ct for thi s request | 629 | // Create an d populate a SavedRe quest obje ct for thi s request | |||||
| 596 | Sa vedRequest saved = n ew SavedRe quest(); | 630 | Sa vedRequest saved = n ew SavedRe quest(); | 630 | Sa vedRequest saved = n ew SavedRe quest(); | |||||
| 597 | Co okie cooki es[] = req uest.getCo okies(); | 631 | Co okie cooki es[] = req uest.getCo okies(); | 631 | Co okie cooki es[] = req uest.getCo okies(); | |||||
| 598 | if (cookies != null) { | 632 | if (cookies != null) { | 632 | if (cookies != null) { | |||||
| 599 | for (int i = 0; i < cookies. length; i+ +) { | 633 | for (int i = 0; i < cookies. length; i+ +) { | 633 | for (int i = 0; i < cookies. length; i+ +) { | |||||
| 600 | save d.addCooki e(cookies[ i]); | 634 | save d.addCooki e(cookies[ i]); | 634 | save d.addCooki e(cookies[ i]); | |||||
| 601 | } | 635 | } | 635 | } | |||||
| 602 | } | 636 | } | 636 | } | |||||
| 603 | En umeration< String> na mes = requ est.getHea derNames() ; | 637 | En umeration< String> na mes = requ est.getHea derNames() ; | 637 | En umeration< String> na mes = requ est.getHea derNames() ; | |||||
| 604 | wh ile (names .hasMoreEl ements()) { | 638 | wh ile (names .hasMoreEl ements()) { | 638 | wh ile (names .hasMoreEl ements()) { | |||||
| 605 | String n ame = name s.nextElem ent(); | 639 | String n ame = name s.nextElem ent(); | 639 | String n ame = name s.nextElem ent(); | |||||
| 606 | Enumerat ion<String > values = request.g etHeaders( name); | 640 | Enumerat ion<String > values = request.g etHeaders( name); | 640 | Enumerat ion<String > values = request.g etHeaders( name); | |||||
| 607 | while (v alues.hasM oreElement s()) { | 641 | while (v alues.hasM oreElement s()) { | 641 | while (v alues.hasM oreElement s()) { | |||||
| 608 | Stri ng value = values.ne xtElement( ); | 642 | Stri ng value = values.ne xtElement( ); | 642 | Stri ng value = values.ne xtElement( ); | |||||
| 609 | save d.addHeade r(name, va lue); | 643 | save d.addHeade r(name, va lue); | 643 | save d.addHeade r(name, va lue); | |||||
| 610 | } | 644 | } | 644 | } | |||||
| 611 | } | 645 | } | 645 | } | |||||
| 612 | En umeration< Locale> lo cales = re quest.getL ocales(); | 646 | En umeration< Locale> lo cales = re quest.getL ocales(); | 646 | En umeration< Locale> lo cales = re quest.getL ocales(); | |||||
| 613 | wh ile (local es.hasMore Elements() ) { | 647 | wh ile (local es.hasMore Elements() ) { | 647 | wh ile (local es.hasMore Elements() ) { | |||||
| 614 | Locale l ocale = lo cales.next Element(); | 648 | Locale l ocale = lo cales.next Element(); | 648 | Locale l ocale = lo cales.next Element(); | |||||
| 615 | saved.ad dLocale(lo cale); | 649 | saved.ad dLocale(lo cale); | 649 | saved.ad dLocale(lo cale); | |||||
| 616 | } | 650 | } | 650 | } | |||||
| 617 | 651 | 651 | ||||||||
| 618 | // May need to acknowl edge a 100 -continue expectatio n | 652 | // May need to acknowl edge a 100 -continue expectatio n | 652 | // May need to acknowl edge a 100 -continue expectatio n | |||||
| 619 | re quest.getR esponse(). sendAcknow ledgement( ); | 653 | re quest.getR esponse(). sendAcknow ledgement( ); | 653 | re quest.getR esponse(). sendAcknow ledgement( ); | |||||
| 620 | 654 | 654 | ||||||||
| 621 | By teChunk bo dy = new B yteChunk() ; | 655 | By teChunk bo dy = new B yteChunk() ; | 655 | By teChunk bo dy = new B yteChunk() ; | |||||
| 622 | bo dy.setLimi t(request. getConnect or().getMa xSavePostS ize()); | 656 | bo dy.setLimi t(request. getConnect or().getMa xSavePostS ize()); | 656 | bo dy.setLimi t(request. getConnect or().getMa xSavePostS ize()); | |||||
| 623 | 657 | 657 | ||||||||
| 624 | by te[] buffe r = new by te[4096]; | 658 | by te[] buffe r = new by te[4096]; | 658 | by te[] buffe r = new by te[4096]; | |||||
| 625 | in t bytesRea d; | 659 | in t bytesRea d; | 659 | in t bytesRea d; | |||||
| 626 | In putStream is = reque st.getInpu tStream(); | 660 | In putStream is = reque st.getInpu tStream(); | 660 | In putStream is = reque st.getInpu tStream(); | |||||
| 627 | 661 | 661 | ||||||||
| 628 | wh ile ( (byt esRead = i s.read(buf fer) ) >= 0) { | 662 | wh ile ( (byt esRead = i s.read(buf fer) ) >= 0) { | 662 | wh ile ( (byt esRead = i s.read(buf fer) ) >= 0) { | |||||
| 629 | body.app end(buffer , 0, bytes Read); | 663 | body.app end(buffer , 0, bytes Read); | 663 | body.app end(buffer , 0, bytes Read); | |||||
| 630 | } | 664 | } | 664 | } | |||||
| 631 | 665 | 665 | ||||||||
| 632 | // Only save the reque st body if there is something to save | 666 | // Only save the reque st body if there is something to save | 666 | // Only save the reque st body if there is something to save | |||||
| 633 | if (body.get Length() > 0) { | 667 | if (body.get Length() > 0) { | 667 | if (body.get Length() > 0) { | |||||
| 634 | saved.se tContentTy pe(request .getConten tType()); | 668 | saved.se tContentTy pe(request .getConten tType()); | 668 | saved.se tContentTy pe(request .getConten tType()); | |||||
| 635 | saved.se tBody(body ); | 669 | saved.se tBody(body ); | 669 | saved.se tBody(body ); | |||||
| 636 | } | 670 | } | 670 | } | |||||
| 637 | 671 | 671 | ||||||||
| 638 | sa ved.setMet hod(reques t.getMetho d()); | 672 | sa ved.setMet hod(reques t.getMetho d()); | 672 | sa ved.setMet hod(reques t.getMetho d()); | |||||
| 639 | sa ved.setQue ryString(r equest.get QueryStrin g()); | 673 | sa ved.setQue ryString(r equest.get QueryStrin g()); | 673 | sa ved.setQue ryString(r equest.get QueryStrin g()); | |||||
| 640 | sa ved.setReq uestURI(re quest.getR equestURI( )); | 674 | sa ved.setReq uestURI(re quest.getR equestURI( )); | 674 | sa ved.setReq uestURI(re quest.getR equestURI( )); | |||||
| 641 | sa ved.setDec odedReques tURI(reque st.getDeco dedRequest URI()); | 675 | sa ved.setDec odedReques tURI(reque st.getDeco dedRequest URI()); | 675 | sa ved.setDec odedReques tURI(reque st.getDeco dedRequest URI()); | |||||
| 642 | 676 | 676 | ||||||||
| 643 | // Stash the SavedRequ est in our session f or later u se | 677 | // Stash the SavedRequ est in our session f or later u se | 677 | // Stash the SavedRequ est in our session f or later u se | |||||
| 644 | se ssion.setN ote(Consta nts.FORM_R EQUEST_NOT E, saved); | 678 | se ssion.setN ote(Consta nts.FORM_R EQUEST_NOT E, saved); | 678 | se ssion.setN ote(Consta nts.FORM_R EQUEST_NOT E, saved); | |||||
| 645 | } | 679 | } | 679 | } | |||||
| 646 | 680 | 680 | ||||||||
| 647 | 681 | 681 | ||||||||
| 648 | /** | 682 | /** | 682 | /** | |||||
| 649 | * Ret urn the re quest URI (with the correspond ing query string, if any) | 683 | * Ret urn the re quest URI (with the correspond ing query string, if any) | 683 | * Ret urn the re quest URI (with the correspond ing query string, if any) | |||||
| 650 | * fro m the save d request so that we can redir ect to it. | 684 | * fro m the save d request so that we can redir ect to it. | 684 | * fro m the save d request so that we can redir ect to it. | |||||
| 651 | * | 685 | * | 685 | * | |||||
| 652 | * @pa ram sessio n Our curr ent sessio n | 686 | * @pa ram sessio n Our curr ent sessio n | 686 | * @pa ram sessio n Our curr ent sessio n | |||||
| 687 | * @re turn the o riginal re quest URL | 687 | * @re turn the o riginal re quest URL | |||||||
| 653 | */ | 688 | */ | 688 | */ | |||||
| 654 | protec ted String savedRequ estURL(Ses sion sessi on) { | 689 | protec ted String savedRequ estURL(Ses sion sessi on) { | 689 | protec ted String savedRequ estURL(Ses sion sessi on) { | |||||
| 655 | 690 | |||||||||
| 656 | Sa vedRequest saved = | 691 | Sa vedRequest saved = | 690 | Sa vedRequest saved = | |||||
| 657 | (SavedRe quest) ses sion.getNo te(Constan ts.FORM_RE QUEST_NOTE ); | 692 | (SavedRe quest) ses sion.getNo te(Constan ts.FORM_RE QUEST_NOTE ); | 691 | (SavedRe quest) ses sion.getNo te(Constan ts.FORM_RE QUEST_NOTE ); | |||||
| 658 | if (saved == null) { | 693 | if (saved == null) { | 692 | if (saved == null) { | |||||
| 659 | return ( null); | 694 | return ( null ) ; | 693 |
return
|
|||||
| 660 | } | 695 | } | 694 | } | |||||
| 661 | St ringBuilde r sb = new StringBui lder(saved .getReques tURI()); | 696 | St ringBuilde r sb = new StringBui lder(saved .getReques tURI()); | 695 | St ringBuilde r sb = new StringBui lder(saved .getReques tURI()); | |||||
| 662 | if (saved.ge tQueryStri ng() != nu ll) { | 697 | if (saved.ge tQueryStri ng() != nu ll) { | 696 | if (saved.ge tQueryStri ng() != nu ll) { | |||||
| 663 | sb.appen d('?'); | 698 | sb.appen d('?'); | 697 | sb.appen d('?'); | |||||
| 664 | sb.appen d(saved.ge tQueryStri ng()); | 699 | sb.appen d(saved.ge tQueryStri ng()); | 698 | sb.appen d(saved.ge tQueryStri ng()); | |||||
| 665 | } | 700 | } | 699 | } | |||||
| 666 | re turn (sb.t oString()) ; | 701 | return ( sb.toStrin g() ) ; | 700 |
return
|
|||||
| 667 | 702 | |||||||||
| 668 | } | 703 | } | 701 | } | |||||
| 669 | 704 | 702 | ||||||||
| 670 | 705 | 703 | ||||||||
| 671 | } | 706 | } | 704 | } |
Araxis Merge (but not the data content of this report) is Copyright © 1993–2017 Araxis Ltd (www.araxis.com). All rights reserved.