小编man*_*ish的帖子

spring mongo数据存储库接口的"无效十六进制表示"

我有一个存储库接口,如下所示:

public interface ExcursionAttendeeRepository extends MongoRepository<ExcursionAttendee, String> {

    ExcursionAttendee findByWorkflowItemId(String workflowItemId);

    @Query("{ 'excursionEvent._id' : { '$oid' : ?0 } }")
    List<ExcursionAttendee> findByExcursionId(String excursionId);

    @Query("{ 'student._id' : {'$oid' : ?0} , 'excursionEvent._id' : { '$oid' : ?1 } }")
    ExcursionAttendee findByStudentIdAndEventId(String studentId, String excursionId);

    @Query("{ 'student._id' : { '$oid' : ?0 } }")
    List<ExcursionAttendee> findByStudentId(String studentId);
}
Run Code Online (Sandbox Code Playgroud)

而Bean创建spring则抛出异常.

Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer#0.1':
  Cannot create inner bean '(inner bean)#5172829b' of type [org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter] while setting bean property …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-data spring-data-mongodb

28
推荐指数
1
解决办法
1197
查看次数

Spring Security 3.2 CSRF支持多部分请求

我们已经将Spring Security与我们的应用程序一起使用了几年.上周我们将Spring Security从3.1.4升级到3.2.0.升级很顺利,我们在升级后没有发现任何错误.

在查看Spring Security 3.2.0文档时,我们遇到了围绕CSRF保护和安全头的新增功能.我们按照Spring Security 3.2.0文档中的说明为受保护资源启用CSRF保护.它适用于常规表单,但不适用于我们的应用程序中的多部分表单.在表单提交时,CsrfFilter引发拒绝访问错误,引用请求中缺少CSRF令牌(通过DEBUG日志确定).我们尝试使用Spring Security文档中建议的第一个选项来使CSRF保护与多部分表单一起工作.我们不想使用第二个建议的选项,因为它通过URL泄漏CSRF令牌并带来安全风险.

基于文档的配置的相关部分在Github上作为Gist提供.我们使用的是Spring 4.0.0版.

请注意,我们已尝试以下变体但未成功:

  1. 没有宣布MultipartFilter进入web.xml.
  2. 没有为MultipartFilterin 设置解析器bean名称web.xml.
  3. 使用默认的解析器bean的名字filterMultipartResolverwebContext.xml.

更新:我已经确认即使使用单页示例应用程序,记录的行为也不起作用.任何人都可以确认记录的行为按预期工作吗?是否有可以使用的示例工作应用程序?

spring spring-mvc csrf spring-security

24
推荐指数
2
解决办法
2万
查看次数

Thymeleaf的Spring Security简单示例

嗨,我正在尝试按照一个简单的例子来做一个我在这个页面中找到的简单登录表单页面 http://docs.spring.io/autorepo/docs/spring-security/4.0.x/guides/form.html

问题是我每次尝试登录时都会收到此错误我收到此错误: Expected CSRF token not found. Has your session expired?

当我收到此错误时,我按下浏览器中的后退按钮并尝试第二次登录,当我这样做时,我收到此错误: HTTP 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'

在教程页面中是这条消息: We use Thymeleaf to automatically add the CSRF token to our form. If we were not using Thymleaf or Spring MVCs taglib we could also manually add the CSRF token using <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

"所以因为我也在使用百里香,我没有把这个标签添加到我的页面"

我找到了另一个解决方案,它的工作原理,这个解决方案是将此添加到我的安全配置类.csrf().disable()这个解决方案有效,但我想这样做是为了禁用我的页面中的csrf保护,我不想禁用这种类型的保护.

这是我的security-config类:

@Configuration
@EnableWebSecurity
public class ConfigSecurity extends WebSecurityConfigurerAdapter {

    @Autowired …
Run Code Online (Sandbox Code Playgroud)

java security spring-mvc spring-security thymeleaf

15
推荐指数
2
解决办法
3万
查看次数

查询方法之间的区别是什么...通过,阅读...通过,查询...通过,并获得...在弹簧数据中?

我正在查看spring数据的文档,并没有找到使用方法的理由read...By,get...By而不是find...By(通常这样做).请澄清:

  • 这种方法有什么作用?
  • 或者这种方法的目的是什么?
  • 在什么情况下更好地使用这种方法?
  • 他们之间有什么区别?

你能写一个query..By方法的例子吗?

spring spring-data spring-data-jpa

13
推荐指数
2
解决办法
4704
查看次数

Spring Data(JPA) - 在@Query中使用泛型

我想知道是否可以在spring数据的命名查询中使用泛型(我自己使用jpa),是否可以做这样的事情?

@NoRepositoryBean
public interface EnumerationRepository<T extends Enumeration> extends JpaRepository<T,Integer> {
  @Query("Select t.type from T t")
  public List<String> selectTypes();
}
Run Code Online (Sandbox Code Playgroud)

枚举类就是这个

@MappedSuperclass
public abstract class Enumeration {

  @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", length = 3)
  private int id;
  @Column(name = "type", nullable = false, unique = true, length = 30)
  private String type;

  // getters / setters .. etc 
}
Run Code Online (Sandbox Code Playgroud)

为简单起见,我在Enumeration类中省略了一些字段.

试过这个,但很明显它抱怨导致类T没有映射.

关键是因为我有20多个表共享一些基本结构,并且因为我需要查询只从列中提取数据,而不是整个实体,所以很高兴找到一种方法来获取"父"存储库中的查询而且不必复制代码20次以上.

generics spring-data-jpa

12
推荐指数
1
解决办法
2877
查看次数

Tomcat Maven插件和多模块Maven项目

我们有一个应用程序,直到最近才是一个单一的Maven WAR项目.我们使用Tomcat Maven插件在本地开发人员工作站上运行应用程序:

mvn tomcat:run
Run Code Online (Sandbox Code Playgroud)

我们能够在嵌入式Tomcat实例运行时更改JSP文件,并且更改将在Web浏览器中正常显示.我理解(从插件文档中)当使用tomcat:run目标时,WAR作为动态Web应用程序加载,因此Tomcat在运行时从源头获取对JSP文件所做的更改而不重新启动.

应用程序已达到相当大的规模,我们需要在Web项目之外的几个不同位置重用大量类,因此我们将代码库重构为多模块Maven项目.结构现在是:

parent Maven POM
    |
     ---- artifact1.jar
    |
     ---- artifact2.jar -> depends on artifact1.jar
    |
     ---- artifact3.jar -> depends on artifact1.jar
    |
     ---- artifact4.jar -> depends on artifact2.jar and artifact3.jar
    |
     ---- artifact5.war -> depends on artifact1.jar, artifact2.jar, artifact3.jar and artifact4.jar
Run Code Online (Sandbox Code Playgroud)

在重构之后我们无法使用tomcat:从项目的根目录运行以运行WAR项目,因为插件无法检测到JAR工件.所以,我们切换到使用tomcat:run-war-only插件.WAR模块现在启动正常.

但是,从文档中可以看出,仅运行战争目标将WAR文件视为打包的Web应用程序.因此,我们对JSP文件所做的任何更改现在都不会被嵌入式Tomcat服务器在运行时获取.对于JSP文件的每次更改,我们都必须重新启动服务器.

我们在这个多模块Maven中是否有办法将WAR项目作为动态Web应用程序运行,以便Tomcat至少可以在不重新启动的情况下获取对JSP文件的更改?

maven-3 maven-tomcat-plugin

7
推荐指数
1
解决办法
4736
查看次数

Spring Boot:H2 数据库未保存到文件

我正在尝试使用 Spring Boot 将 H2 内存数据库持久化到一个文件中,以重用其中的数据。

不幸的是,指定数据源 url 的方式如下

spring.datasource.url = jdbc:h2:file:~/WeatherDB;FILE_LOCK=FS
Run Code Online (Sandbox Code Playgroud)

完整的 application.properties

对我不起作用。我在硬盘上的任何地方都找不到 H2 生成的文件(另外,重新启动服务器后保存的数据不可用)。

为了可视化这一点,我创建了一个示例项目,可以在Bitbucket上找到。

有了这个,如果应用程序是从 IDE 运行的,gradle run或者从 jar 打包它,它似乎没有什么区别。

需要什么配置选项来持久化和重用 H2 DB?

更新:

我意识到有在配置选项的执行端点http://localhost:8080/configprops昭示着

"spring.datasource.CONFIGURATION_PROPERTIES": {

    "prefix": "spring.datasource",
    "properties": {
        "schema": null,
        "data": null,
        "xa": {
            "dataSourceClassName": null,
            "properties": { }
        },
        "separator": ";",
        "url": "jdbc:h2:file:~/WeatherDB",
        "platform": "all",
        "continueOnError": false,
        "jndiName": null,
        "sqlScriptEncoding": null,
        "password": "******",
        "driverClassName": "org.h2.Driver",
        "initialize": true,
        "username": "sa"
    }
},
Run Code Online (Sandbox Code Playgroud)

但是我WeatherDB在我的硬盘上找不到文件,重新启动服务器后也没有任何数据可用。 …

spring h2 spring-data spring-boot

7
推荐指数
2
解决办法
1万
查看次数

Spring数据JPA findFirst,findTop不起作用

根据Spring Data JPA文档的第3.4.5节,可以通过使用关键字first和来限制查询方法的结果top

我写了这样的代码:

SysPrefixName findFirstByTableName(String tableName);
Run Code Online (Sandbox Code Playgroud)

但是,运行代码时出现此错误:

结果返回多个元素;嵌套异常为javax.persistence.NonUniqueResultException:结果返回多个元素

解决任何帮助将不胜感激。

spring-data-jpa

7
推荐指数
1
解决办法
1万
查看次数

如何从使用JAXB生成的XML中删除默认的根元素名称空间前缀

我正在使用带有spring-mvc框架的JAXB来生成XML.这是根元素的示例:

<ns2:urlset xmlns:ns2="http://www.example.com">
Run Code Online (Sandbox Code Playgroud)

但是,这就是我想要的(没有XML名称空间前缀ns2):

<urlset xmlns="http://www.example.com">
Run Code Online (Sandbox Code Playgroud)

我试图使用以下内容package-info.java删除默认前缀ns2.

@javax.xml.bind.annotation.XmlSchema(  
    namespace = "http://www.example.com",   
    xmlns = {@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.example.com", prefix="")},  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED)  
package com.example.code
Run Code Online (Sandbox Code Playgroud)

ns2如果我设置prefix为另一个字符串,前缀可以更改为其他值(比).但是,通过将prefix值设置为"",无法删除前缀.它仍然显示默认值ns2.有没有办法删除默认前缀ns2

另一个问题是,如果standaloneXML的标题中的属性也可以删除吗?如果是这样,可以通过package-info.java吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

spring-mvc jaxb

6
推荐指数
1
解决办法
6942
查看次数

在Spring Data JPA中使用连接继承时,避免跨表的外连接

考虑Spring Data JPA(+ Hibernate)应用程序中的以下类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "person")
public class Person { }

@Entity
@Table(name = "customer")
public class Customer extends Person { }

@Entity
@Table(name = "employee")
public class Employee extends Person { }

@Entity
@Table(name = "manager")
public class Manager extends Employee { }

public interface IPersonRepository extends JpaRepository<Person, Long> { }
public interface ICustomerRepository extends JpaRepository<Customer, Long> { }
public interface IEmployeeRepository extends JpaRepository<Employee, Long> { }
Run Code Online (Sandbox Code Playgroud)

我最常见的用例涉及调用以下方法(继承自JpaRepository):

IPersonRepository.findAll();
Run Code Online (Sandbox Code Playgroud)

每当调用此方法时,Hibernate都会发出以下SQL查询:

select
    person0_.id …
Run Code Online (Sandbox Code Playgroud)

inheritance hibernate jpa joined-subclass spring-data-jpa

6
推荐指数
1
解决办法
2163
查看次数