セッションタイムアウト後もAlfresco WebScriptsが呼び出されることができますか?
-
12-12-2019 - |
質問
私がしているのは、alfrescoとShareの両方をweb.xmlファイルで60分60分に設定します。
私のシナリオは
- 起動ワークフローページでワークフローを起動したい場合は、すべてを記入します 必要なデータが「ワークフローの開始」ボタンをクリックしないでください。
- セッションタイムアウト後、この「ワークフローの開始」ボタンをクリックします。
- 初めて、認証ボックスが開き、UserNameを要求する とパスワード
- 私は他のユーザーのユーザー名とパスワードを入力しました。
- 認証された他のユーザーを使用してワークフローを起動します。
- セッションタイムアウトの他の時間、認証を要求しません ボックスですが、以前に要求された認証ユーザーに行動します。
だから私はなぜそれが起こるのかと思いますか?クッキーのためですか?
現在4つのクッキー、すなわちalflogin、alfusername2、jssessionId、_alftestがあります。ユーザーがログアウトされている場合にのみ、alfusername2 cookieは削除され、他のものはdremained.alfloginとalfusername2 cookieの期限切れの時間は7日で、他のCookieはセッションに依存します。
Alfresco Webスクリプトはまだセッションタイムアウトの後に使用されますか?もしそうなら、この状態を回避するにはどうすればいいですか?
解決
私は自分の質問に答えなければなりませんが、結果を共有したいだけです。私はあまり痕跡しなければなりません。しかし、答えはとてもシンプルです。
最初に、それはクッキーのためではありません。
この回答は、「ワークフローの開始」ボタンをクリックするだけでなく、 Share でセッションタイムアウトした後にAlfresco WebScriptを呼び出します。
Alfresco WebScriptへのすべての呼び出しは、EndPointProxyController
のorg.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController
によって行われます。
spring-webscripts-1.0.0-sources.jar
メソッドセッションがない場合、BasichTtpauthChallengeが真の場合、基本認証ボックスは以下のように表示されます。
.
else if (this.basicHttpAuthChallenge || descriptor.getBasicAuth())
{
// check for HTTP authorisation request (i.e. RSS feeds, direct links etc.)
String authorization = req.getHeader("Authorization");
if (authorization == null || authorization.length() == 0)
{
res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
"No USER_ID found in session and requested endpoint requires authentication.");
res.setHeader("WWW-Authenticate", "Basic realm=\"Alfresco\"");
// no further processing as authentication is required but not provided
// the browser will now prompt the user for appropriate credentials
return null;
}
else
{
// other coding
}
この状態をとして回避できます
slingshot-application-context.xml のhandleRequestInternal
、変更 basichttpauthchallenge to false。のように
.<!-- Override EndPointProxyController to enable Basic HTTP auth challenge on 401 response --> <bean id="endpointController" class="org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController"> <property name="cacheSeconds" value="-1" /> <property name="useExpiresHeader"><value>true</value></property> <property name="useCacheControlHeader"><value>true</value></property> <property name="configService" ref="web.config" /> <property name="connectorService" ref="connector.service" /> <property name="supportedMethods"><null/></property> <property name="basicHttpAuthChallenge"><value>false</value></property> </bean>