Jhipster-JpaRepository "principal.username" @ Query-org.springframework.expression.spel.SpelEvaluationException

モーリス

特定の方法でレストコントローラーをテストしているときにエラーが発生しました。@Query注釈を使用してデータベースクエリを実行しています。そして、それを行うために「principal.username」を使用しています。私は、principal.usernameがどのようにフェッチされ、アプリケーションで使用されるかについての全体像を把握していません。私は現在、それに関する春のセキュリティに関するドキュメントを見ています。しかし、私の問題はテスト部分にあります。以下のテストを実行すると、が原因で「Faillure」というエラーが発生します@Query

レポジトリ:

public interface MeetingRepository extends JpaRepository<Meeting,Long> {

  @Query("select m from Meeting m where m.visibility = 'PUBLIC' OR m.user.login = ?#{principal.username}")
  List<Meeting> findOpenAndUserMeetings();

}

Rest Controllerメソッド:

@RequestMapping(value = "/api/meetings", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Meeting>> getAll()
{
    List<Meeting> meetings = MeetingRepository.findOpenAndUserMeetings();
    return new ResponseEntity<List<Meeting>>(meetings, HttpStatus.OK);
}

テスト:

@Test
@Transactional
public void getAllMeetings() throws Exception {
    // Initialize the database
    MeetingRepository.saveAndFlush(Meeting);

    // Get all the Meetinges
    restMeetingMockMvc.perform(get("/api/meetings"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON));
}

そしてこのエラー:

getAllMeetings(com.ent.web.rest.MeetingResourceTest)  Time elapsed: 0.07 sec  <<< ERROR!
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 10): Property or field 'username' cannot be found on object of type 'java.lang.String' - maybe not public?
        at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:226)
        at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:93)
        at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:46)
        at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:372)
        at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88)
        at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:131)
        at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:299)
        at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.evaluateExpression(SpelExpressionStringQueryParameterBinder.java:131)
        at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.potentiallyBindExpressionParameters(SpelExpressionStringQueryParameterBinder.java:89)
        at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.bind(SpelExpressionStringQueryParameterBinder.java:69)
        at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateCountQuery(AbstractStringBasedJpaQuery.java:109)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createCountQuery(AbstractJpaQuery.java:190)
        at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:173)
        at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:74)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:97)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:88)
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:395)
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:373)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:122)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
        at com.sun.proxy.$Proxy148.findOpenAndUserMeetings(Unknown Source)
        at com.ent.web.rest.MeetingResource.getAll(MeetingResource.java:77)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
        at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
        at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167)
        at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
        at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:144)
        at com.ent.web.rest.MeetingResourceTest.getAllMeetings(MeetingResourceTest.java:151)

編集

この「?#{principal.username}」をテストで使用するにはどうすればよいですか?調査したところ、Spring Security 4.0:WebSocket、Spring Data、およびテストサポートが見つかりました。

春データ統合これは、SPELを使用してクエリ春データ内の現在のユーザーにアクセスできるようになりました。Java構成でこの機能を有効にするには、@ Beanを定義できます。

@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension(){
    return new SecurityEvaluationContextExtension();
}

次に、クエリでSpringSecurityのプリンシパルを参照できます。例えば:

public interface BlogRepository extends JpaRepository<Blog,Long> {
    @Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
    List<Blog> findAllForCurrentUser();
}

それは文脈の問題ですか?

マット・レイブル

私のプロジェクトに#{principal.username}は、クエリの1つで使用するリポジトリがあります外観は次のとおりです。

public interface BlogRepository extends JpaRepository<Blog, Long> {

    @Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
    List<Blog> findAllForCurrentUser();
}

私のBlogResourceコントローラーはこれを次のように呼び出します。

 @Timed
 public List<Blog> getAll() {
     log.debug("REST request to get all Blogs for current user");
     return blogRepository.findAllForCurrentUser();
 }

これをテストするために、Spring Security 4.0.1にアップグレードし、spring-security-testへの依存関係を追加しました。

<spring-security.version>4.0.1.RELEASE</spring-security.version>

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

BlogResourceTest、私は上の依存関係を追加WebApplicationContextしてUserRepository

@Autowired
WebApplicationContext context;

@Inject
UserRepository userRepository;

次に、getAllBlogs()Spring Securityの「with(user(username))」機能を使用するようにテストを変更しました

 @Test
 @Transactional
 public void getAllBlogs() throws Exception {
    restBlogMockMvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build();

     // Initialize the database
     blog.setUser(userRepository.findOneByLogin("user").get());
     blogRepository.saveAndFlush(blog);

     // Get all the blogs
    restBlogMockMvc.perform(get("/api/blogs").with(user("user")))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON))
        .andExpect(jsonPath("$.[*].id").value(hasItem(blog.getId().intValue())))
        .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME.toString())))
        .andExpect(jsonPath("$.[*].handle").value(hasItem(DEFAULT_HANDLE.toString())));
 }

Spring Securityのテストアノテーション(@WithMockUserおよび@WithUserDetails)が機能しない理由がわかりません。私は一週間前にこれについて質問しました:

RequestPostProcessorとアノテーションを使用したSpringMVCテスト

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Jhipster-JpaRepository "principal.username" @ Query-org.springframework.expression.spel.SpelEvaluationException

分類Dev

org.springframework.expression.spel.SpelEvaluationException

分類Dev

org.springframework.expression.spel.SpelEvaluationException:EL1008E:プロパティまたはフィールド「latestTotalCasesは」オブジェクト上に見つかりませんでした。

分類Dev

org.springframework.expression.spel.SpelEvaluationException:EL1004E:(pos 15):メソッド呼び出し:メソッドgetId()がjava.util.ArrayListタイプで見つかりません

分類Dev

SPRING java.lang.NoSuchMethodError:クォーツスケジュールの追加後のorg.springframework.expression.spel.SpelParserConfiguration

分類Dev

Springマイクロサービス-原因:java.lang.ClassNotFoundException:org.springframework.expression.spel.support.SimpleEvaluationContext

分類Dev

原因:org.springframework.expression.spel.SpelParseException:式[] @ 31:EL1043E:予期しないトークン。'colon(:)'が必要ですが 'rcurly(}でした

分類Dev

Spring java.lang.NoSuchMethodError:org.springframework.expression.games.PlayParserConfiguration

分類Dev

Spring java.lang.NoSuchMethodError:org.springframework.expression.games.PlayParserConfiguration

分類Dev

JpaRepository native query not detecting parameters

分類Dev

Thymelaf and Spring Security - custom SpEL expression

分類Dev

Accessing nested headers with Spring Expression Language (SpEL)

分類Dev

org.springframework.dao.DataAccessResourceFailureException

分類Dev

org.springframework.beans.NotReadablePropertyException:

分類Dev

ClassNotFoundException:org.springframework.jdbc.datasource.DriverManagerDataSource

分類Dev

Elasticsearch "org.springframework.http.converter.HttpMessageNotWritableException"

分類Dev

org.springframework.validation.BeanPropertyBindingResult例外

分類Dev

例外org.springframework.beans.factory.UnsatisfiedDependencyException

分類Dev

org.springframework.data.redis.serializer.SerializationException

分類Dev

奇妙なorg.springframework.jdbc.BadSqlGrammarException

分類Dev

ClassNotFoundException :: org.springframework.web.context.ContextLoaderListener

分類Dev

org.springframework.web.servlet.DispatcherServlet noHandlerFound

分類Dev

org.springframework.web.servlet.DispatcherServlet noHandlerFound

分類Dev

org.springframework.beans.factory.CannotLoadBeanClassException:

分類Dev

org.springframework.batch.item.file.FlatFileParseException:

分類Dev

org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException

分類Dev

org.springframework.beans.factory.UnsatisfiedDependencyException 1

分類Dev

org.springframework.beans.factory.UnsatisfiedDependencyException org.springframework.beans.factory.NoUniqueBeanDefinitionException

分類Dev

How nested FETCH JOIN works on Hibernate using JpaRepository and @Query annotation?

Related 関連記事

  1. 1

    Jhipster-JpaRepository "principal.username" @ Query-org.springframework.expression.spel.SpelEvaluationException

  2. 2

    org.springframework.expression.spel.SpelEvaluationException

  3. 3

    org.springframework.expression.spel.SpelEvaluationException:EL1008E:プロパティまたはフィールド「latestTotalCasesは」オブジェクト上に見つかりませんでした。

  4. 4

    org.springframework.expression.spel.SpelEvaluationException:EL1004E:(pos 15):メソッド呼び出し:メソッドgetId()がjava.util.ArrayListタイプで見つかりません

  5. 5

    SPRING java.lang.NoSuchMethodError:クォーツスケジュールの追加後のorg.springframework.expression.spel.SpelParserConfiguration

  6. 6

    Springマイクロサービス-原因:java.lang.ClassNotFoundException:org.springframework.expression.spel.support.SimpleEvaluationContext

  7. 7

    原因:org.springframework.expression.spel.SpelParseException:式[] @ 31:EL1043E:予期しないトークン。'colon(:)'が必要ですが 'rcurly(}でした

  8. 8

    Spring java.lang.NoSuchMethodError:org.springframework.expression.games.PlayParserConfiguration

  9. 9

    Spring java.lang.NoSuchMethodError:org.springframework.expression.games.PlayParserConfiguration

  10. 10

    JpaRepository native query not detecting parameters

  11. 11

    Thymelaf and Spring Security - custom SpEL expression

  12. 12

    Accessing nested headers with Spring Expression Language (SpEL)

  13. 13

    org.springframework.dao.DataAccessResourceFailureException

  14. 14

    org.springframework.beans.NotReadablePropertyException:

  15. 15

    ClassNotFoundException:org.springframework.jdbc.datasource.DriverManagerDataSource

  16. 16

    Elasticsearch "org.springframework.http.converter.HttpMessageNotWritableException"

  17. 17

    org.springframework.validation.BeanPropertyBindingResult例外

  18. 18

    例外org.springframework.beans.factory.UnsatisfiedDependencyException

  19. 19

    org.springframework.data.redis.serializer.SerializationException

  20. 20

    奇妙なorg.springframework.jdbc.BadSqlGrammarException

  21. 21

    ClassNotFoundException :: org.springframework.web.context.ContextLoaderListener

  22. 22

    org.springframework.web.servlet.DispatcherServlet noHandlerFound

  23. 23

    org.springframework.web.servlet.DispatcherServlet noHandlerFound

  24. 24

    org.springframework.beans.factory.CannotLoadBeanClassException:

  25. 25

    org.springframework.batch.item.file.FlatFileParseException:

  26. 26

    org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException

  27. 27

    org.springframework.beans.factory.UnsatisfiedDependencyException 1

  28. 28

    org.springframework.beans.factory.UnsatisfiedDependencyException org.springframework.beans.factory.NoUniqueBeanDefinitionException

  29. 29

    How nested FETCH JOIN works on Hibernate using JpaRepository and @Query annotation?

ホットタグ

アーカイブ