Pergunta

O que estou fazendo é definir ao ar livre e compartilhar o tempo limite da sessão de 60 minutos em seu arquivo web.xml.

Meu cenário é

  1. Quando eu quiser iniciar um fluxo de trabalho na página Iniciar o fluxo de trabalho, preencho todos os dados necessários, mas não clique no botão "Iniciar o fluxo de trabalho".
  2. Após o tempo limite da sessão, clico no botão "Iniciar fluxo de trabalho".
  3. Na primeira vez, a caixa de autenticação é aberta e solicita o nome de usuário e a senha.
  4. Preenchi o nome de usuário e a senha de outro usuário.
  5. Ele inicia um fluxo de trabalho com outro usuário autenticado.
  6. Outras vezes, para o tempo limite da sessão, ele não solicita caixa de autenticação, mas atua para o usuário autenticado solicitado anteriormente.

Então eu acho Por que isso acontece???É por causa do biscoito??

Atualmente são utilizados quatro cookies, nomeadamente alfLogin, alfUsername2, JSSESSIONID, _alfTest.Somente quando o usuário está desconectado, o cookie alfUsername2 é excluído e outros permanecem. O tempo de expiração dos cookies alfLogin e alfUsername2 é de 7 dias e outros cookies dependem da sessão.

O script da web ao ar livre ainda pode ser usado após o tempo limite da sessão? Se sim, como posso evitar essa condição?

Foi útil?

Solução

Embora eu tenha que responder minha própria pergunta, só quero compartilhar meu resultado.Eu tenho que rastrear muito.Mas a resposta é tão simples.

Em primeiro lugar, não é por causa do cookie.

Esta resposta não serve apenas para clicar no botão "Iniciar fluxo de trabalho", mas também chamando o webscript ao ar livre após o tempo limite da sessão no compartilhamento.

Todas as chamadas para webscript ao ar livre são feitas por EndPointProxyController especificamente org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController em spring-webscripts-1.0.0-sources.jar.

Em handleRequestInternal se não houver sessão e basicHttpAuthChallenge for verdadeiro, a caixa de autenticação básica é mostrada abaixo.

            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
                }   

Podemos evitar esta condição como

em endpointController de slingshot-application-context.xml, mudar basicHttpAuthChallenge para falso.

Como

   <!-- 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top