我已經成功地應用瞭如何基於這個article整合facebook用戶登錄與facebook,它圍繞創建自定義認證令牌,領域,認證信息和facebook的空憑證匹配器。Apache Shiro:如何手動登錄和創建會話?
我現在遇到的問題是,儘管我可以成功地進行登錄,但我似乎無法啓動會話,從我的自定義會話存儲中可以看到。請注意,使用'normal-non-facebook'登錄有效,會話被創建。
我的猜測是,這個問題有事情做與shiroFilter +的loginUrl能夠創建本地會話,並手動做SecurityUtils.getSubject()登錄(令牌)無法創建本地會話。
當我這樣做是希望創建手動登錄後的會話:
SecurityUtils.getSubject().login(facebookToken);
SecurityUtils.getSubject().getSession(true);
我得到這個異常:
org.apache.shiro.subject.support.DisabledSessionException:會話 當前主題的創建已被禁用。 這一例外表示存在編程錯誤(在不應使用會話時使用會話 ),或者調整Shiro的配置 以允許爲當前主題創建會話。 有關更多信息,請參閱org.apache.shiro.subject.support.DisabledSessionException JavaDoc。
這裏是我的會話相關CONFIGS:
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="globalSessionTimeout" value="xxx" />
<property name="sessionDAO" ref="sessionDAO" />
<property name="sessionValidationSchedulerEnabled" value="false" />
<property name="sessionIdCookie.domain" value="xxx.com" />
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="sessionMode" value="native" />
<property name="realms">
<list>
<ref bean="mainRealm" />
<ref bean="fbRealm" />
</list>
</property>
<property name="sessionManager" ref="sessionManager" />
</bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login"/>
<property name="successUrl" value="/"/>
<property name="unauthorizedUrl" value="/signup"/>
<property name="filterChainDefinitions">
<value>
/login = ssl, authc
/logout = noSessionCreation, logout
/** = noSessionCreation, anon
</value>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
<property name="arguments" ref="securityManager"/>
</bean>
所以最後,我應該如何在自動創建會話並返回會話cookie到瀏覽器的方式登錄?