关于在SpringBoot应用程序中禁用HTTPOPTIONS方法和springboot禁用options请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于html–我可以在Spring
关于在Spring Boot应用程序中禁用HTTP OPTIONS方法和springboot禁用options请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于html – 我可以在Spring Boot应用程序中从Thymeleaf表发出HTTP POST请求、Spring Boot应用程序中特定于环境的application.properties文件、Spring Boot应用程序中的特定于环境的application.properties文件、Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 在Spring Boot应用程序中禁用HTTP OPTIONS方法(springboot禁用options请求)
- html – 我可以在Spring Boot应用程序中从Thymeleaf表发出HTTP POST请求
- Spring Boot应用程序中特定于环境的application.properties文件
- Spring Boot应用程序中的特定于环境的application.properties文件
- Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法
在Spring Boot应用程序中禁用HTTP OPTIONS方法(springboot禁用options请求)
我已经在spring boot应用程序上开发了rest
API。这些API仅接受GET和POST,但是在使用OPTIONS方法请求时,API会响应200状态(而不是405)。我用谷歌搜索了这个问题,但是没有一个解决方案是基于springboot的。
响应:
Allow: OPTIONS, TRACE, GET, HEAD, POSTPublic: OPTIONS, TRACE, GET, HEAD, POST
需要禁用OPTIONS方法。
答案1
小编典典先前的答仅适用于tomcat,因此也要添加我的。您可以通过例如使用标准的servlet过滤器来禁用方法交叉容器:
import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter;@Componentpublic class MethodFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (request.getMethod().equals("OPTIONS")) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); } else { filterChain.doFilter(request, response); } }}
注意:假设此类由Spring组成。如果没有,您可以使用此处详细介绍的其他注册方法。
html – 我可以在Spring Boot应用程序中从Thymeleaf表发出HTTP POST请求
<p>There are <span th:text="${#lists.size(persons)}"></span> people:</p> <table th:if="${not #lists.isEmpty(persons)}" border="1"> <tr> <th>ID</th> <th>Name</th> <th>Address</th> <th>Telephone</th> <th>Email</th> <th>Actions</th> </tr> <tr th:each="person : ${persons}"> <td th:text="${person.personId}"></td> <td th:text="${person.name}"></td> <td th:text="${person.address}"></td> <td th:text="${person.telephone}"></td> <td th:text="${person.email}"></td> <td> <a href="#" data-th-href="@{/edit(personId=${person.personId})}">Edit</a> | <a href="#" data-th-href="@{/delete(personId=${person.personId})}">Delete</a> </td> </tr> </table>
我想根据表格中的最后一个单元格启用编辑和删除功能.但目前这两个请求都是针对HTTP GET的.这对于从服务器获取人员的详细信息以进行编辑的编辑很好,但是由于服务器上的数据更改,删除应该触发POST请求.
有没有人知道Thymeleaf是否允许每行一个表的POST请求?或者我是否必须每行编写一个简单的HTML表单?
GET表格目前是:
<td> <a href="#" data-th-href="@{/edit(personId=${person.personId})}">Edit</a> <!--a href="#" data-th-href="@{/delete(personId=${person.personId})}">Delete</a></td--> <form method="get" th:action="@{/edit(personId=${person.personId})}"> <button type="submit" name="submit" value="value">Edit</button> </form> </td>
我有一个链接和一个表格进行测试.
要调用的控制器方法是:
// Gets a Person. @RequestMapping(value="/edit",method=RequestMethod.GET) public String getEditPerson(@RequestParam("personId") String personId,Model model) { logger.info(PersonController.class.getName() + ".getEditPerson() method called."); Person person = personDAO.get(Integer.parseInt(personId)); model.addAttribute("person",person); // Set view. return "/edit"; }
调用GET按钮版本时的错误是:
Whitelabel Error Page This application has no explicit mapping for /error,so you are seeing this as a fallback. Sun Jul 24 00:26:16 BST 2016 There was an unexpected error (type=Bad Request,status=400). required String parameter 'personId' is not present`
我正在使用GET来触发编辑,因为除了personId之外,没有数据发送到服务器.没有采取数据库操作,所以它应该是GET.
解决方法
在下面的示例中,使用< button>而不是< a>元素,但它会工作,你唯一需要做的就是用CSS设置你的按钮样式,看起来像你的链接
<form method="POST" th:action="@{/edit(personId=${person.personId})}"> <button type="submit" name="submit" value="value">This is a link that sends a POST request</button> </form>
现在你的代码应该是这样的
<tr th:each="person : ${persons}"> <td th:text="${person.personId}"></td> <td th:text="${person.name}"></td> <td th:text="${person.address}"></td> <td th:text="${person.telephone}"></td> <td th:text="${person.email}"></td> <td> <form method="POST" th:action="@{/edit(personId=${person.personId})}"> <button type="submit" name="submit" value="value">EDIT</button> </form> | <form method="POST" th:action="@{/delete(personId=${person.personId})}"> <button type="submit" name="submit" value="value">DELETE</button> </form> </td> </tr>
编辑
当您刚刚分享Java代码时,在控制器中您期望personId不是PathVariable,而是作为RequestParam,
在这种情况下,你的表格应具有这个价值……
编辑您的表单并添加人员ID,如下所示.
<form method="POST" th:action="@{/edit}"> <input type="hidden" name="personid" id="personId" th:value="${person.personId}" /> <button type="submit" name="submit" value="value">This is a link that sends a POST request</button> </form>
另请注意,我将表单的操作更改为/ edit,就像控制器的外观一样
Spring Boot应用程序中特定于环境的application.properties文件
在我的Spring
Boot应用程序中,我想创建特定于环境的属性文件。我在战争中应用程序的包装类型,我正在嵌入式tomcat中执行它。我使用sts并从sts本身执行main。
- 我可以拥有特定于环境的属性文件,例如application-$ {env-value} .properties吗?
在上述情况下,env-value的值将为local / devl / test / prod
在哪里设置环境价值文件?对于本地,我可以通过sts将其设置为jvm参数
谁在Spring Boot应用程序中读取application.properties。
如何加载环境特定的属性文件?例如-如果我在特定于环境的属性文件中设置数据库uid,pwd,schema等,在这种情况下,数据源将能够理解其中的属性吗?
我可以同时使用application.properties和application-local.properties文件吗?
答案1
小编典典Spring Boot已经支持基于配置文件的属性。
只需添加application-[profile].properties
文件并使用spring.profiles.active
属性指定要使用的配置文件。
-Dspring.profiles.active=local
这会从第一个加载application.properties
和application-local.properties
,后者具有后者的覆盖属性。
Spring Boot应用程序中的特定于环境的application.properties文件
如何解决Spring Boot应用程序中的特定于环境的application.properties文件?
Spring Boot已经支持基于配置文件的属性。
只需添加application-[profile].properties
文件并使用spring.profiles.active
属性指定要使用的配置文件。
-Dspring.profiles.active=local
这将加载application.properties
和application-local.properties
与来自第一后者压倒一切的性质。
解决方法
在我的Spring Boot应用程序中,我想创建特定于环境的属性文件。我在战争中应用程序的包装类型,我正在嵌入式tomcat中执行它。我使用sts并从sts本身执行main。
-
我可以拥有特定于环境的属性文件,例如application-$ {env-value} .properties吗?
在上述情况下,env-value的值将为local / devl / test / prod -
在哪里设置环境值文件?对于本地,我可以通过sts将其设置为jvm参数
-
谁在Spring Boot应用程序中读取application.properties。
-
如何加载环境特定的属性文件?例如-如果我在特定于环境的属性文件中设置数据库uid,pwd,schema等,在这种情况下,数据源将能够理解其中的属性吗?
-
我可以同时使用application.properties和application-local.properties文件吗?
Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法
如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议,需要的朋友可以参考下
如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议。
准备
为了使用HTTPS连接器,需要生成一份Certificate keystore,用于加密和机密浏览器的SSL沟通。
如果你使用Unix或者Mac OS,可以通过下列命令:keytool -genkey -alias tomcat -keyalg RSA,在生成过程中可能需要你填入一些自己的信息,例如我的机器上反馈如下:
可以看出,执行完上述命令后在home目录下多了一个新的.keystore文件。
实战首先在resources目录下新建一个配置文件tomcat.https.properties,用于存放HTTPS的配置信息;
custom.tomcat.https.port=8443 custom.tomcat.https.secure=true custom.tomcat.https.scheme=https custom.tomcat.https.ssl=true custom.tomcat.https.keystore=${user.home}/.keystore custom.tomcat.https.keystore-password=changeit
然后在WebConfiguration类中创建一个静态类TomcatSslConnectorProperties;
@ConfigurationProperties(prefix = "custom.tomcat.https") public static class TomcatSslConnectorProperties { private Integer port; private Boolean ssl = true; private Boolean secure = true; private String scheme = "https"; private File keystore; private String keystorePassword; //这里为了节省空间,省略了getters和setters,读者在实践的时候要加上 public void configureConnector(Connector connector) { if (port != null) { connector.setPort(port); } if (secure != null) { connector.setSecure(secure); } if (scheme != null) { connector.setScheme(scheme); } if (ssl != null) { connector.setProperty("SSLEnabled", ssl.toString()); } if (keystore != null && keystore.exists()) { connector.setProperty("keystoreFile", keystore.getAbsolutePath()); connector.setProperty("keystorePassword", keystorePassword); } } }
通过注解加载tomcat.https.properties配置文件,并与TomcatSslConnectorProperties绑定,用注解修饰WebConfiguration类;
@Configuration @PropertySource("classpath:/tomcat.https.properties") @EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorProperties.class) public class WebConfiguration extends WebMvcConfigurerAdapter {...}
在WebConfiguration类中创建EmbeddedServletContainerFactory类型的Srping bean,并用它添加之前创建的HTTPS连接器。
@Bean public EmbeddedServletContainerFactory servletContainer(TomcatSslConnectorProperties properties) { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); tomcat.addAdditionalTomcatConnectors(createSslConnector(properties)); return tomcat; } private Connector createSslConnector(TomcatSslConnectorProperties properties) { Connector connector = new Connector(); properties.configureConnector(connector); return connector; }
通过mvn spring-boot:run启动应用程序;在浏览器中访问URLhttps://localhost:8443/internal/tomcat.https.properties
在浏览器中访问URLhttp://localhost:8080/internal/application.properties
分析
根据之前的文章和官方文档,Spring Boot已经对外开放了很多服务器配置,这些配置信息通过Spring Boot内部的ServerProperties类完成绑定,若要参考Spring Boot的通用配置项,请点击这里
Spring Boot不支持通过application.properties同时配置HTTP连接器和HTTPS连接器。在官方文档70.8中提到一种方法,是将属性值硬编码在程序中。
因此我们这里新建一个配置文件tomcat.https.properties来实现,但是这并不符合“Spring Boot风格”,后续有可能应该会支持“通过application.properties同时配置HTTP连接器和HTTPS连接器”。我添加的TomcatSslConnectorProperties是模仿Spring Boot中的ServerProperties的使用机制实现的,这里使用了自定义的属性前缀custom.tomcat而没有用现有的server.前缀,因为ServerProperties禁止在其他的配置文件中使用该命名空间。
@ConfigurationProperties(prefix = "custom.tomcat.https")这个注解会让Spring Boot自动将custom.tomcat.https开头的属性绑定到TomcatSslConnectorProperties这个类的成员上(确保该类的getters和setters存在)。值得一提的是,在绑定过程中Spring Boot会自动将属性值转换成合适的数据类型,例如custom.tomcat.https.keystore的值会自动绑定到File对象keystore上。
使用@PropertySource("classpath:/tomcat.https.properties")来让Spring Boot加载tomcat.https.properties文件中的属性。
使用@EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorProperties.class)让Spring Boot自动创建一个属性对象,包含上述通过@PropertySource导入的属性。
在属性值导入内存,并构建好TomcatSslConnectorProperties实例后,需要创建一个EmbeddedServletContainerFactory类型的Spring bean,用于创建EmbeddedServletContainer。
通过createSslConnector方法可以构建一个包含了我们指定的属性值的连接器,然后通过tomcat.addAdditionalTomcatConnectors(createSslConnector(properties));设置tomcat容器的HTTPS连接器。
参考资料配置SSL
Spring Boot 1.x系列
了解Spring Boot的自动配置
springboot整合redis进行数据操作(推荐)
Spring Boot项目中如何定制HTTP消息转换器
Spring Boot整合Mongodb提供Restful接口
总结
以上所述是小编给大家介绍的Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法,希望对大家有所帮助!
关于在Spring Boot应用程序中禁用HTTP OPTIONS方法和springboot禁用options请求的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于html – 我可以在Spring Boot应用程序中从Thymeleaf表发出HTTP POST请求、Spring Boot应用程序中特定于环境的application.properties文件、Spring Boot应用程序中的特定于环境的application.properties文件、Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法的相关知识,请在本站寻找。
本文标签: