我在heroku上部署了Spring Boot
Java应用程序。我想确保只能通过https访问我的注册端点。到目前为止,我知道,heroku使用负载平衡器将每个https连接重定向到带有特殊标头(X-forwarded-
porto)的http。我在用
compile("org.springframework.boot:spring-boot-starter-security")
用于加密工具(哈希密码)。我将“ security.basic.enable”属性设置为false(实际上不知道在这种情况下是否重要。)。
尝试已经设置以下设置:
tomcat:
remote_ip_header: x-forwarded-for
protocol_header: x-forwarded-proto
在我的application.yml中
问题是,我如何才能强制仅通过https链接使用端点?对于http,它可能会返回404之类的内容。我正在使用gradle,很难找到使用它的参考。尝试了一些在google中找到的东西,但是没有用(或者我不知道如何正确实现它们…)。我仍然可以使用邮递员通过http访问端点。现在看起来像这样:
@Controller
@RequestMapping("/users")
public class AccountController {
@Autowired
private AccountRepository accountDao;
@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<Resource<Account>> createAccount(@RequestBody @Valid Account account) { ... }
实际上,我已经在此仓库https://github.com/fenrirx22/springmvc-https-
enforcer中
找到了一个解决方案(终于)。
创建了2个课程:
@Configuration
public class ApiConfig {
@Bean
public Filter httpsEnforcerFilter(){
return new HttpsEnforcer();
}
}
和:
public class HttpsEnforcer implements Filter {
private FilterConfig filterConfig;
public static final String X_FORWARDED_PROTO = "x-forwarded-proto";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (request.getHeader(X_FORWARDED_PROTO) != null) {
if (request.getHeader(X_FORWARDED_PROTO).indexOf("https") != 0) {
response.sendRedirect("https://" + request.getServerName() + request.getPathInfo());
return;
}
}
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
// nothing
}
}
奇迹般有效。
问题内容: 我最初的问题是如何为Django登录页面启用HTTPS,唯一的回应是建议我- 将整个站点设置为仅HTTPS。 鉴于我正在使用Django 1.3和nginx,将网站设为仅HTTPS的正确方法是什么? 一个回应提到了一个中间件解决方案,但有一个警告: Django在维护POST数据时无法执行SSL重定向。请整理你的视图,以便仅在GET期间进行重定向。 关于服务器故障的有关nginx重写为
问题内容: 如何使用Jersey客户端API将GET请求发送到运行HTTPS协议的服务器。我可以使用任何示例代码吗? 问题答案: 这样构建您的客户 从此博客文章中窃取了更多详细信息:http : //blogs.oracle.com/enterprisetechtips/entry/consumption_restful_web_services_with 有关设置证书的信息,请参见以下已很好回答
我想运行只使用HTTPS(8443)的嵌入式tomcat。我根本不想使用8080端口。有关于的想法吗? 谢谢
我已经将Jetty 9.2HTTP/1.1+SSL服务器(嵌入式)升级到Jetty 9.3.0(v20150612)HTTP/HTTPS 2.0(SLL(TLS)-alpn-HTTP/2)。我使用JRE8(Oracle1.8.0Build45-B15)和Eclipse。 *通过JOAKIM的回答解决问题:解决方案见帖子末尾* 在升级之前,HTTP和HTTPS工作得很好,只要用Jetty9.3 Ja
问题内容: 我有2个应用程序,一个是Servlet / Tomcat服务器,另一个是Android应用程序。 我想使用HttpURLConnection在两者之间发送和接收XML。 码: 现在,我需要使用SSL来发送XML以确保安全。 首先,我使用Java Keytool生成.keystore文件。 然后我将XML代码放在Tomcat的server.xml文件中以使用SSL 然后,将其更改为Htt
我在Kubernetes集群中安装了Kubernetes NGINX入口 我在AWS EC2实例上部署了所有内容,经典负载均衡器位于入口控制器的前面。我可以用http端口访问服务,但不能用HTTPS访问它。 我从godaddy购买了一个有效的域,并从证书管理器获得了AWS SSL证书