2016-04-14 23 views
0

私のアプリケーションに問題があります。 私が春のセキュリティを使い始めると、PrimeFacesのいくつかのことはうまくいきません。 f:setPropertyActionListener、改行記号p:dataTable ...私は修正を検索するための一日を失ったが、何も起こらない。Spring Security + PrimeFacesページングエラー

どのように見えるのですか?

のpom.xml

<packaging>war</packaging> 

    <properties> 
     <spring.version>4.2.5.RELEASE</spring.version> 
     <spring.security.version>4.0.4.RELEASE</spring.security.version> 
     <hibernate.version>5.1.0.Final</hibernate.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>5.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.13</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.13</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
     </dependency> 

     <!-- Spring 4 dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-taglibs</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.webflow</groupId> 
      <artifactId>spring-webflow</artifactId> 
      <version>2.4.2.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.webflow</groupId> 
      <artifactId>spring-faces</artifactId> 
      <version>2.4.2.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901-1.jdbc4</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>all-themes</artifactId> 
      <version>1.0.10</version> 
     </dependency> 


    </dependencies> 

のweb.xmlファイル

<!-- Spring Security Facelets Tag Library --> 
    <context-param> 
     <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
     <param-value>/WEB-INF/config/springsecurity.taglib.xml</param-value> 
    </context-param> 

    <!-- Change to "Production" when you are ready to deploy --> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 

    <display-name>PrimeFaces Web Application</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/config/applicationContext.xml 
      /WEB-INF/config/spring-security.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Spring Security --> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <!-- Welcome page --> 
    <welcome-file-list> 
     <welcome-file>faces/main/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <!-- JSF mapping --> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <!-- Map these files with JSF --> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

springsecurity.taglib.xml

<facelet-taglib> 
    <namespace>http://www.springframework.org/security/tags</namespace> 
    <tag> 
     <tag-name>authorize</tag-name> 
     <handler-class>org.springframework.faces.security.FaceletsAuthorizeTagHandler</handler-class> 
    </tag> 
    <function> 
     <function-name>areAllGranted</function-name> 
     <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class> 
     <function-signature>boolean areAllGranted(java.lang.String)</function-signature> 
    </function> 
    <function> 
     <function-name>areAnyGranted</function-name> 
     <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class> 
     <function-signature>boolean areAnyGranted(java.lang.String)</function-signature> 
    </function> 
    <function> 
     <function-name>areNotGranted</function-name> 
     <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class> 
     <function-signature>boolean areNotGranted(java.lang.String)</function-signature> 
    </function> 
    <function> 
     <function-name>isAllowed</function-name> 
     <function-class>org.springframework.faces.security.FaceletsAuthorizeTagUtils</function-class> 
     <function-signature>boolean isAllowed(java.lang.String, java.lang.String)</function-signature> 
    </function> 
</facelet-taglib> 

メートルY applicationContext.xmlを

<context:component-scan base-package="xxx.yyy"/> 

    <context:annotation-config/> 

    <context:spring-configured/> 
    <!-- Data Source Declaration --> 

    <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
     <property name="driverClassName" value="org.postgresql.Driver"/> 
     <property name="url" value="jdbc:postgresql://localhost:5432/postgres"/> 
     <property name="username" value="xxx"/> 
     <property name="password" value="yyy"/> 
    </bean> 

    <!-- Session Factory Declaration --> 
    <bean id="SessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="DataSource"/> 
     <property name="packagesToScan"> 
      <list> 
       <value>xxx.yyy</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL82Dialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
      </props> 
     </property> 
    </bean> 

    <!-- Enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="txManager"/> 

    <!-- Transaction Manager is defined --> 
    <bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="SessionFactory"/> 
    </bean> 

私の私はのweb.xmlからこの行を削除しspring-security.xml

 <intercept-url pattern="/javax.faces.resource/**" access="permitAll"/> 

     <form-login 
       login-page="/login" 
       default-target-url="/index" 
       authentication-failure-url="/login?error" 
       username-parameter="username" 
       password-parameter="password"/> 
     <logout logout-success-url="/login?logout"/> 
     <csrf/> 
    </http> 

    <authentication-manager alias="authenticationManager"> 
     <authentication-provider user-service-ref="customUserDetailsService"> 
      <password-encoder hash="plaintext"></password-encoder> 
     </authentication-provider> 
    </authentication-manager> 

<filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

すべてがうまくいく(例: p:dataTabeの改行記号) - 春のセキュリティはありません。 これらの行がweb.xmlに入っていると、春のセキュリティーはうまく動作しますが、私は最初の例で書きました。ページ番号:p:dataTable doest work。

誰かが似たような問題を抱えている可能性がありますか?

+0

で 1. <csrf disabled="true"/> 2.

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> :それを修正するには2通りの方法がありますか?ブラウザーのHTTPトラフィックモニターでajax応答を慎重に検査しましたか?彼らはすべて401/403やログインページなどを返しましたか?ところで、サーブレットとJSP APIをwebappと共に提供するのは悪いです。 – BalusC

+0

** BalusC **ご意見ありがとうございます。私はすでにそれを修正する。問題は** spring-security.xml **ファイルの ''でした。 これを修正するには2通りの方法があります: '' csrf disabled = "true" /> ' 2.' ' all <'h:form' – xxrafalekkoo

+1

JSFにCSRF保護機能が既に組み込まれていることを知っておくと便利でしょう。 – BalusC

答えて

0

問題はspring-security.xmlファイルにあります。だから、春のセキュリティは、すべてのAJAX要求をブロックしているすべての<h:form