我有一个存储库接口,如下所示:
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) 我们已经将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版.
请注意,我们已尝试以下变体但未成功:
MultipartFilter进入web.xml.MultipartFilterin 设置解析器bean名称web.xml.filterMultipartResolver在webContext.xml.更新:我已经确认即使使用单页示例应用程序,记录的行为也不起作用.任何人都可以确认记录的行为按预期工作吗?是否有可以使用的示例工作应用程序?
嗨,我正在尝试按照一个简单的例子来做一个我在这个页面中找到的简单登录表单页面 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) 我正在查看spring数据的文档,并没有找到使用方法的理由read...By,get...By而不是find...By(通常这样做).请澄清:
你能写一个query..By方法的例子吗?
我想知道是否可以在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次以上.
我们有一个应用程序,直到最近才是一个单一的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文件的更改?
我正在尝试使用 Spring Boot 将 H2 内存数据库持久化到一个文件中,以重用其中的数据。
不幸的是,指定数据源 url 的方式如下
spring.datasource.url = jdbc:h2:file:~/WeatherDB;FILE_LOCK=FS
Run Code Online (Sandbox Code Playgroud)
对我不起作用。我在硬盘上的任何地方都找不到 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 Data JPA文档的第3.4.5节,可以通过使用关键字first和来限制查询方法的结果top。
我写了这样的代码:
SysPrefixName findFirstByTableName(String tableName);
Run Code Online (Sandbox Code Playgroud)
但是,运行代码时出现此错误:
结果返回多个元素;嵌套异常为javax.persistence.NonUniqueResultException:结果返回多个元素
解决任何帮助将不胜感激。
我正在使用带有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 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) spring ×3
spring-data ×3
spring-mvc ×3
csrf ×1
generics ×1
h2 ×1
hibernate ×1
inheritance ×1
java ×1
jaxb ×1
jpa ×1
maven-3 ×1
mongodb ×1
security ×1
spring-boot ×1
thymeleaf ×1