我使用Eclipse(Spring Tool Suite)创建了一个HelloWorld Spring MVC应用程序。它有一个Controller和一个jsp。该应用程序显示" Hello World!"在网页上。我不会发布这个代码(除非被问到),因为它是微不足道的,不重要的。我正在使用Pivotal tc Server Developer Edition v3.1(随Spring Tool Suite一起提供)。
所以,我添加Spring 4安全性,保护root(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();
}
答案 0 :(得分:0)
我已经弄明白了。
我工作的公司认为在我们的计算机上运行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");
}
}