Tag: spring boot

Spring Boot安全性CORS

我对弹簧安全URL的CORSfilter有问题。 它不会在属于spring sec(登录/注销)的URL上设置Access-Control-Allow-Origin和其他公开的标头,也不会被Spring Security过滤。 这是配置。 CORS: @Configuration @EnableWebMvc public class MyWebMvcConfig extends WebMvcConfigurerAdapter { ********some irrelevant configs************ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(“/*”).allowedOrigins(“*”).allowedMethods(“GET”, “POST”, “OPTIONS”, “PUT”) .allowedHeaders(“Content-Type”, “X-Requested-With”, “accept”, “Origin”, “Access-Control-Request-Method”, “Access-Control-Request-Headers”) .exposedHeaders(“Access-Control-Allow-Origin”, “Access-Control-Allow-Credentials”) .allowCredentials(true).maxAge(3600); } } 安全: @Configuration @EnableWebSecurity public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { […]

Spring Boot 2中缺少TomcatEmbeddedServletContainerFactory

我有Spring Boot应用程序版本1.5.x,它使用org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory ,我正在尝试将其迁移到Spring Boot 2,但该应用程序无法编译,尽管它有一个依赖项to org.springframework.boot:spring-boot-starter-tomcat 。 编译器发出以下错误: error: package org.springframework.boot.context.embedded.tomcat

Spring Boot和自定义404错误页面

在我的Spring Boot应用程序中,我正在尝试配置自定义错误页面,例如对于404,我在应用程序配置中添加了以下Bean: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, “/404.html”)); } }; } 另外,我创建了以下简单的Thymeleaf模板: 404 Not Found 404 Not Found 404 Error java.lang.NullPointerException Back to Home Page 并将其添加到/resources/templates/文件夹中。 就在404错误我只能看到白屏。 我做错了什么以及如何正确设置我的404页面? 此外,是否可以使用模板而不仅仅是自定义错误页面的静态页面?

无法在logback.xml中使用Spring Property Place

我有一个使用Logback的Spring Boot控制台应用程序。 所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中。 这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中。 似乎在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符。 以FileNamePattern为例,在application.properties中,我有这样的事情: log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE} 在logback.xml中,我会这样: ${log.logDirectory}${log.filePattern}.log 运行应用程序时,我会看到以下错误: ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 – RuntimeException in Action for tag [rollingPolicy] java.lang.IllegalStateException: FileNamePattern [log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log] does not contain a valid DateToken 类似的代码在其他Spring(而不是Spring Boot)应用程序中运行得很好,所以我很好奇Spring Boot的行为有点不同。 解: 感谢@Gary的回复! 很高兴知道Spring EL和Logback变量之间的区别……我原以为是Spring负责为我解析这些变量。 我确实有元素,但这让我思考。 我的application.properties文件在jar之外,所以Logback不知道在哪里找到它。 通过在我的外部application.properties文件中保存与Spring相关的属性,将与日志相关的属性移动到application-internal.properties文件(位于jar中),并将Logback指向该文件( )让一切按预期工作!

事务注释在Spring Boot中不起作用

@Transactional在Spring Boot中不起作用。 Application.java: @EnableTransactionManagement(proxyTargetClass=true) @SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class}) public class Application { @Autowired private EntityManagerFactory entityManagerFactory; public static void main(String[] args) { System.out.println(“————————— Start Application —————————“); ApplicationContext ctx = SpringApplication.run(Application.class, args); } @Bean public SessionFactory getSessionFactory() { if (entityManagerFactory.unwrap(SessionFactory.class) == null) { throw new NullPointerException(“factory is not a hibernate factory”); } return entityManagerFactory.unwrap(SessionFactory.class); } @Bean public […]

是否可以扩展WebMvcConfigurationSupport并使用WebMvcAutoConfiguration?

我需要扩展WebMvcConfigurationSupport类,修改两件事: @Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); handlerMapping.setRemoveSemicolonContent(false); handlerMapping.setOrder(1); return handlerMapping; } } 我喜欢从WebMvcAutoConfiguration类注册的默认值,但由于类上的条件注释,当我扩展WebMvcConfigurationSupport类时,它会阻止自动配置发生。 @Configuration @ConditionalOnWebApplication @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @Order(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter(DispatcherServletAutoConfiguration.class) public class WebMvcAutoConfiguration {…} 是否要加载WebMvcAutoConfiguration类而不必实际复制/粘贴该类中的大多数代码? 或者是否可以从其他地方调用RequestMappingHandlerMapping setOrder()和setRemoveSemicolonContent(),这样我就可以使用@EnableWebMvc注释并运行自动配置类而没有任何问题? 提前致谢!

Spring Boot OAuth2单点注销(注销)

我正在考虑将OAuth2用于我的应用程序。 我想要实现的架构如下: 我将拥有自己的(也是唯一一个)授权服务器 某些资源应用程序使用授权服务器validation对其资源的访问 一些客户端应用程序(Web,移动)将用户重定向到授权服务器进行身份validation并成功将消耗资源应用程序上的api。 到目前为止,我已设法在3个基本应用程序(1个auth服务器,1个资源服务器和1个客户端)之间实现此交互。 我没有工作的是注销function。 我已经读过Dave Syer在他的教程中描述的“臭名昭着的棘手问题” ,但在这种情况下我真的需要用户在注销后重新登录。 我已经尝试给访问令牌和刷新令牌提供几秒钟,但是当到期时,我没有被提示再次登录,而是在客户端应用程序上获得NPE。 我也尝试过这篇文章中提出的解决方案来从令牌存储中删除令牌,但它不起作用。 单点注销对我来说是这种实现的理想行为。 如何使用Spring Boot Oauth2实现此目的。 如果由于某种原因不可能,我可以使用哪些替代方法来实现使用Spring Boot的集中安全性? 提前致谢。

如何使用Spring Boot提供不同的数据库配置?

我目前看到它有5个可能的数据库配置文件 CI测试 – > h2 mem 开发人员环境(可以是测试或应用程序运行) – > h2 mem,或h2文件,或postgres 制作 – > postgres(理想情况下凭证不存储在git / war中) 目前我已经配置了运行应用程序的postgres,而h2配置为通过在java/resource s vs test/resources中使用不同的application.properties进行test/resources 在这些情况下,更新数据库连接信息的最简单方法是什么?

SpringBoot 1.5.x + Security + OAuth2

我有一个带有OAuth2安全性的Spring Boot REST API。 今天我将spring-boot-starter-parent从1.4.2升级到1.5.2 。 变化让我很困惑。 之前,我可以使用Postman测试我的REST API。 当我的访问令牌不正确或我没有特定资源的权限时,服务器响应如下: { “error”: “access_denied”, “error_description”: “Access is denied” } 现在它一直将我重定向到/login页面…当我登录时 – 它显示我的资源而没有任何OAuth2身份validation… 我试图禁用它,我发现了这个神奇的属性: security.oauth2.resource.filter-order = 3 该行关闭重定向到登录页面。 但是,我的问题是: 这两个版本在安全方面发生了什么? 这个“奇怪”的行是唯一有效的修复方法吗? 这个登录页面的目的是什么以及它正在使用什么身份validation(我检查了Google Chrome中的请求和响应,我看不到任何访问令牌和oauth2的东西,所以它只使用用户存储库?) 我的代码中一些更重要的部分: 的pom.xml org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE 2.1.0.RELEASE org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-actuator org.springframework.boot spring-boot-starter-security org.springframework.security.oauth spring-security-oauth2 ${spring-security-oauth.version} application.properties #other properties security.oauth2.resource.filter-order = 3 OAuth2.java […]

Spring Boot关闭钩子

如何注册/添加一个自定义关闭例程,该例程将在我的Spring Boot应用程序关闭时触发? 场景:我将Spring Boot应用程序部署到Jetty servlet容器(即没有嵌入式Jetty)。 我的应用程序使用Logback进行日志记录,我想使用Logback的MBean JMX配置程序在运行时更改日志记录级别。 其文档指出,为了避免内存泄漏,在关闭时必须调用特定的LoggerContext关闭方法 。 听取Spring Boot关闭事件的好方法是什么? 我努力了: public static void main(String[] args) throws Exception { ConfigurableApplicationContext cac = SpringApplication.run(Example.class, args); cac.addApplicationListener(new ApplicationListener() { @Override public void onApplicationEvent(ContextClosedEvent event) { logger.info(“Do something”); } }); } 但是当应用程序关闭时,不会调用此已注册的侦听器。