- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用特定方法测试我的休息 Controller 时遇到错误。我正在使用 @Query
注释来执行我的数据库查询。它使用“principal.username”来做到这一点。我没有关于如何在我的应用程序中获取和使用 principal.username 的全部图片。我目前正在查看有关它的 spring-security 文档。但我的问题出在测试部分,当我执行下面的测试时,由于 @Query
出现错误“Failure”。
存储库:
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();
}
休息 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 and Test Support
Spring 数据集成现在可以使用 SpEL 在 Spring Data 查询中访问当前用户。要使用 Java 配置启用此功能,您可以定义一个@Bean。
@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension(){
return new SecurityEvaluationContextExtension();
}
然后你可以在你的查询中引用Spring Security的主体。例如:
public interface BlogRepository extends JpaRepository<Blog,Long> {
@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
List<Blog> findAllForCurrentUser();
}
是上下文问题吗?
最佳答案
在我的项目中,我有一个在其中一个查询中使用 #{principal.username}
的存储库。这是它的样子:
public interface BlogRepository extends JpaRepository<Blog, Long> {
@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
List<Blog> findAllForCurrentUser();
}
我的 BlogResource
Controller 调用它如下:
@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)不起作用。我一周前问了一个关于这个的问题:
关于java - Jhipster - JpaRepository "principal.username"@Query - org.springframework.expression.spel.SpelEvaluationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455362/
我已经根据此链接安装了开箱即用的监控: http://www.jhipster.tech/monitoring/ 当我开始时: docker-compose up -d 一切都开始了,但 Elasta
我想将克隆的 ng-jhipster 项目配置为生成的 JHipster 应用程序的依赖项。 我正在使用以下版本(来自 jhipster 信息): git version 2.15.0 node:
最近,我一直在尝试为 JHipster 实现一个蓝图。我决定覆盖实体和实体服务器子生成器。每个子生成器都有多个阶段,我可以选择/完全覆盖/部分覆盖/不覆盖/。这些阶段是: /initializing(
在 Spring Boot 中,可以在 application.properties 文件中定义应用程序属性。例如,Rest 的前缀可以定义为 spring.data.rest.basePath=ap
是否可以为组织定制/扩展 JHipster? 我的意思是有一个本地版本,可以创建一些具有特定于组织的功能的项目?例如,使用自定义身份验证方案(仍然依赖于 Spring 安全性)、使用自定义样式(颜色、
我计划创建一个微服务应用程序,其中包含用于处理数据的专用服务(主要是基于 Mongodb 的服务)。我想知道是否有一种方法可以让我的其他微服务能够与此服务进行通信以利用共享数据。 JHipster A
我已经使用 yarn 安装了 jhipster-generator 版本 5.1.0。 今天,我需要卸载这个版本,以便从版本 5.1.0 降级到版本 5.0.1。 尝试时: yarn global r
我第一次尝试安装 jhipster 并且在设置方面已经出现问题:o 我正在按照“使用 Yarn 本地安装”(使用 Angular)的“安装 JHipster”页面上的步骤操作,该页面工作正常,但现在继
我在src/main/webapp/dist/img下有一些图片 我可以使用相对路径从我的 html 模板访问这些文件: 如果我将文件移动到子文件夹,我必须更新所有路径。 在 JHi
假设只有管理员可以创建新用户。 在管理 > 用户管理中有一个“创建新用户”按钮,但目前没有用。管理员无法设置密码和激活新用户。 我找到的唯一方法是: 退出 在主页上注册一个新帐户 以管理员身份再次登录
我正在尝试使用以下命令安装旧版本的 jhipster: sudo npm install -g generator-jhipster@3.2 或者 yarn global add generator-
有什么方法可以阻止 Jhipster 在生成后提交到我的本地存储库? 如果我导入新的 . jdl 或强制重新生成,Jhipster 会在未经我许可的情况下自动在我的本地存储库中提交新更改。请就此提出建
本文档中的“启用此功能时”是什么意思http://www.jhipster.tech/entities-filtering/引用? 我的 jdl 文件没问题(感谢最近的实现:https://githu
抱歉,如果这不是问这些问题的地方。但我只想知道是否... JHipster 可以去大规模应用吗? 是否可以最大限度地减少代码的生成,尤其是 UI 部分? 我可以扩展一些已经生成的 RestContro
我试图在我的自定义蓝图中覆盖模板 Entity.java.ejs 以添加一些额外的功能。不幸的是,如果生成实体,JHipster 使用其默认值。我不想覆盖整个写作。是否有可能仅覆盖某些模板并为其余部分
当我尝试在 jhipster 上创建一个新实体时,如果我选择添加一个类型枚举的字段,我会遇到这个问题: The entity Produit is being created. The entity
有人可以发布带有 angular 2 的 Jhipster 4.0 入门指南吗? 我不在乎它是否被释放。我只想用github上的最新代码生成代码并继续。 谢谢。 最佳答案 更新 - Deepu 在 g
我们使用了 jhipster 的微服务架构,生成了三个应用 哇, 微服务, 网关。 然后在服务器上运行 uaa 和 jhipster 注册表,我们还有一些全栈开发人员 希望同时开发网关和微服务的人。
在我们的项目中,我们使用域模型文档。一个文档可能有多个标题,所以根据我的 JPA 知识,我会像这样对 Document 实体进行建模: @Entity public class Document {
我需要复制一个 jhipster 项目。自从我创建了这个项目以来,我已经更新了 jhipster 版本。我想用第一个项目的相同 jhipster 版本复制项目。 我如何知道我的第一个应用程序使用的是哪
我是一名优秀的程序员,十分优秀!