簡體   English   中英

IBM WebSphere 8.5.5.8(Liberty)+ Spring Security 3.1.3發布

[英]IBM WebSphere 8.5.5.8(Liberty) + Spring Security 3.1.3.RELEASE

我們有一個基於appfuse入門套件版本2.2.1構建的示例Web應用程序,該應用程序使用Spring Security 3.1.3 RELEASE。 我們將在WAS 7上部署它,並在IBM WebSphere 8.5.5.8(Liberty)上對其進行測試。 我們的問題是成功/失敗的登錄請求后,某些東西破壞了請求的ServletPath值並將其設置為null。

(((HttpServletRequest)請求).getServletPath()

這是LocaleFilter嘗試使用getServletPath()的/ j_security_check值執行chain.doFilter的時候,我們遇到了:

應用程序類'org.springframework.security.web.util.AntPathRequestMatcher.getRequestPath:116'引發的異常java.lang.NullPointerException:在org.springframework.security.web.util.AntPathRequestMatcher.getRequestPath(AntPathRequestMatcher.java:116)位於org.springframework.security.web.DefaultSecurityFilterChain.matches(DefaultSecurityFilterChain.java:42)的org.springframework.security.web.util.AntPathRequestMatcher.matches(AntPathRequestMatcher.java:100)在org.springframework.security.web.FilterChainProxy處。 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:176)的org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)的getFilters(FilterChainProxy.java:203)位於org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)的com.ibm.ws.webcontainer.filter.FilterInstanceWrap的.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper)的com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:59)的[內部類]處的per.doFilter(FilterInstanceWrapper.java:207) .java:207),位於org.tuckey.web.filters.urlrewrite.NormalRewriteUrl.doRewrite(NormalRewriteUrl.java:213),位於org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java: 171)位於org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)位於org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)位於org.tuckey.web com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207)上的.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)在ir.dpi.webapp.filter的[內部類]中。 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)位於com.ibm.ws.w的LocaleFilter.doFilterInternal(LocaleFilter.java:67) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)[內部類]的ebcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207)在org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:76)在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207)在com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java: 129)在com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207)在[內部類]

這是我們的security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:beans="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

<http pattern="/images/**" security="none"/>
<http pattern="/styles/**" security="none"/>
<http pattern="/scripts/**" security="none"/>

<http auto-config="false" create-session="always">
    <intercept-url pattern="/app/admin/**" access="ROLE_ADMIN"/>
    <intercept-url pattern="/app/passwordHint*" access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/>
    <intercept-url pattern="/app/signup*" access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/>
    <intercept-url pattern="/app/**" access="ROLE_ADMIN,ROLE_USER"/>
    <form-login login-page="/login" authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/>
    <remember-me user-service-ref="userDao" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/>
</http>

<authentication-manager >
    <authentication-provider user-service-ref="userDao" >
        <password-encoder ref="passwordEncoder" >
            <salt-source ref="saltSource" />
        </password-encoder>
    </authentication-provider>
</authentication-manager>

<beans:bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource"
    p:userPropertyToUse="username"/>


<global-method-security>
    <protect-pointcut expression="execution(* *..service.UserManager.getUsers(..))" access="ROLE_ADMIN"/>
    <protect-pointcut expression="execution(* *..service.UserManager.removeUser(..))" access="ROLE_ADMIN"/>
</global-method-security>
</beans:beans>

任何幫助,將不勝感激。

我已經找到了使用此代碼牧場主題的解決方案。 AppFuse使用不同的Filters(javax.servlet),並且IBM WebSphere的Wrapping機制對會話創建優先級敏感。 因此,我已將web.xml文件中的Spring securityFilter映射向上移動。

     <filter-mapping>
        <filter-name>securityFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
     </filter-mapping>

     <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
     </filter-mapping>

     <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
     </filter-mapping>
     ...

現在,登錄過程已完全完成。

請注意,在Liberty server.xml中設置以下設置至關重要:

<httpSession cookieName="MY_LIBERTY_COOKIE" />
<basicRegistry />

IBM WebSphere Application Server(WAS完整版)中的等效設置在以下位置進行設置:

會話管理->常規屬性->啟用cookie

同樣在WAS版本7(可能適用於其他版本)中,要求使用:

 <http auto-config="false" disable-url-rewriting="true" create-session="always"> 

在spring security.xml文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM