gpt4 book ai didi

spring - 重定向到 https 时,我的网址中出现双根上下文

转载 作者:行者123 更新时间:2023-11-28 23:26:38 25 4
gpt4 key购买 nike

我使用 Eclipse(Spring 工具套件)创建了一个 HelloWorld Spring MVC 应用程序。它有一个 Controller 和一个jsp。应用程序显示“Hello World!”在网页上。我不会为此发布代码(除非被问及),因为它微不足道且不重要。我正在使用 Pivotal tc Server Developer Edition v3.1(Spring Tool Suite 附带)。

因此,我添加了 Spring 4 安全性,保护根 (requiresChannel().antMatchers("/").requiresSecure();) 并部署。

我在浏览器中输入“http://localhost:8081/helloWorld/”,然后我被重定向到“http://localhost:8081/helloWorld/helloWorld/”。

我在 tc-server/tomcat 中使用了所有默认值。我完全没有改变。

我猜 Tomcat 正在执行此操作,我必须关闭 Tomcat 重定向,因为我正在使用 Spring 进行重定向。有人有什么想法吗?

package com.test.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
System.out.println(System.getProperty("env"));
if(System.getProperty("env").equals("dit"))
{
auth.inMemoryAuthentication()
.withUser("user").password("user").roles("USER").and()
.withUser("admin").password("admin").roles("USER", "ADMIN");
}
else if(System.getProperty("env").equals("sit"))
{
auth.inMemoryAuthentication()
.withUser("user").password("user").roles("USER").and()
.withUser("admin").password("admin").roles("USER", "ADMIN");
}
else if(System.getProperty("env").equals("uat"))
{
auth.inMemoryAuthentication()
.withUser("user").password("user").roles("USER").and()
.withUser("admin").password("admin").roles("USER", "ADMIN");
}
else if(System.getProperty("env").equals("prd"))
{
auth.inMemoryAuthentication()
.withUser("user").password("user").roles("USER").and()
.withUser("admin").password("admin").roles("USER", "ADMIN");
}
}

@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.anyRequest().permitAll()
.and()
.formLogin()
.and()
.httpBasic()
.and()
.requiresChannel()
.antMatchers("/").requiresSecure();
}

最佳答案

我想通了。

我工作的公司认为在我们的计算机上有一个在 8080 上运行的进程是合适的。这意味着我必须使用 8080 以外的端口。我使用 8083。所以我期待 requiresChannel 从端口 8083 切换到端口 8443。需要明确告知 HttpSecurity 从不安全端口到安全端口的映射。默认情况下,它将 80 映射到 443,将 8080 映射到 8443。如果您想要默认值之外的其他内容,则必须告诉 HttpSecurity。请参阅下面的示例。

@Configuration
@EnableWebSecurity
public class PortMapperSecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests().antMatchers("/**").hasRole("USER").and().formLogin()
.permitAll().and()
.portMapper().http(8083).mapsTo(8443).http(80).mapsTo(443);
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}

关于spring - 重定向到 https 时,我的网址中出现双根上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com