简体   繁体   English

Ajax会话超时FullAjaxExceptionHandlerFactory无法与shiro一起使用

[英]Ajax Session Time Out FullAjaxExceptionHandlerFactory not working with shiro

Details of the code that i have added for using Ajax Session time out, as described by BaluC 我为使用Ajax会话超时而添加的代码的详细信息,如BaluC所述

Faces-Config.xml Faces-Config.xml

<factory>
        <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

Web.xml Web.xml

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/expired.xhtml</location>
 </error-page>

application-config.xml application-config.xml

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <!-- override these for application-specific URLs if you like: -->
    <property name="loginUrl" value="/index.xhtml" />
    <property name="successUrl" value="/dashboard" />
    <property name="unauthorizedUrl" value="/login" />
    <property name="filters">
        <util:map>
            <entry key="authc">
                <bean
                    class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" />
            </entry>

        </util:map>

    </property>

    <property name="filterChainDefinitions">
        <value>
        [main]
           user.loginUrl = /login.xhtml

        [users]
            admin = password

        [urls]
           /login.xhtml = user
            /css/**=anon
            /images/**=anon
            /emailimages/**=anon

            /login=anon
            /test=anon

            /sso=anon
            /ssologin=anon
            /**=authc


        </value>
    </property>
</bean>
<bean id="facesFilter" class="com.xxx.temp.FacesAjaxAwareUserFilter"></bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <!-- <property name="sessionMode" value="native"/> -->
    <property name="realms">
        <list>
            <ref bean="jdbcRealm" />
            <ref bean="googleRealm" />
        </list>
    </property>
    <!-- <property name="realms" ref="jdbcRealm googleRealm" /> -->
    <property name="cacheManager" ref="cacheManager" />
    <!-- <property name="sessionManager" ref="sessionManager"/> -->

</bean>





<!-- <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> 
    <property name="cacheManagerConfigFile" value="/WEB-INF/ehcache.xml"/> </bean> -->

<bean id="passwordService"
    class="org.apache.shiro.authc.credential.DefaultPasswordService">
</bean>

<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManager" ref="ehCacheManager" />
</bean>

<!-- <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> 
    <property name="sessionDAO" ref="sessionDAO"/> </bean> -->

<bean id="ehCacheManager"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />

<!-- <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO"/> -->





<bean id="jdbcRealm" class="com.xxx.domain.web.permissions.MyWebRealm">
</bean>

<bean id="googleRealm" class="com.xxx.domain.web.permissions.GoogleRealm">
    <!-- <property name="dataSource" ref="dataSource" /> -->
    <property name="credentialsMatcher"> <bean class="com.fetchinglife.domain.web.permissions.GoogleCredentialsMatcher"/> </property>
</bean>

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

<bean
    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor" />

Added class file FacesAjaxAwareUserFilter ** code copied from BaluC blog ** 添加了类文件FacesAjaxAwareUserFilter **从BaluC博客复制的代码**

Jar files added 添加了Jar文件

omniface-1.7.jar

Added this in .xhtml file 在.xhtml文件中添加了此内容

xmlns:o="http://omnifaces.org/ui"
    xmlns:of="http://omnifaces.org/functions"

came up with a warning 提出警告

NLS missing message: CANNOT_FIND_FACELET_TAGLIB in: 
 org.eclipse.jst.jsf.core.validation.internal.facelet.messages

Current status: 当前状态:

No response found, page wont redirect on Session timeout ajax call. 找不到响应,页面不会在会话超时ajax调用上重定向。

Problem solved using this configuration. 使用此配置解决了问题。

faces-config.xml faces-config.xml

<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

Make Shiro JSF ajax aware by adding FacesAjaxAwareUserFilter 通过添加FacesAjaxAwareUserFilter使Shiro JSF ajax意识

Added <bean class="com.xxx.custom.FacesAjaxAwareUserFilter" /> to util:map 已将<bean class="com.xxx.custom.FacesAjaxAwareUserFilter" />util:map

application-config.xml application-config.xml

<util:map>
<entry key="authc">
<bean
class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" />
<bean class="com.xxx.custom.FacesAjaxAwareUserFilter" />
</entry>
</util:map>

web.xml web.xml

Added error redirect page to the web.xml . 将错误重定向页面添加到了web.xml

<error-page>
<error-code>500</error-code>
<location>/error.xhtml</location>
</error-page>

Mistake in my part. 我有错

There happens to be a SessionTimeoutFilter which was used for redirecting non Ajax Timeout events, Due to some personal reasons, they wont works peacefully together and i still don't know what made the angry, when staying together. 碰巧有一个SessionTimeoutFilter用于重定向非Ajax超时事件,由于某些个人原因,它们将无法和平共处,而我仍然不知道是什么原因使他们在一起。 Any help on that is greatly appreciated. 任何帮助,我们将不胜感激。

This is the code i removed 这是我删除的代码

 <filter> <filter-name>SessionTimeoutFilter</filter-name> <filter-class>com.xxx.SessionTimeoutFilter</filter-class> <init-param> <param-name>SessionTimeoutRedirect</param-name> <param-value>/login</param-value> </init-param> </filter> <filter-mapping> <filter-name>SessionTimeoutFilter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM