我已经配置了基本身份验证我的Spring-Boot应用程序。一切都是Java Config,没有xml。
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 {
// Authenticate username -> admin, password -> admin & set role as "ROLE_USER"
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
// All Requests should be Authenticated
.anyRequest().authenticated()
.and()
// Enable Basic Authentication
.httpBasic()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/main", true)
.loginProcessingUrl("/session")
.usernameParameter("Username").passwordParameter("Password")
.and()
.logout().logoutUrl("/logout").permitAll()
.and().csrf().disable();
}
}
它被配置为基本身份验证和正常形式登录。当我在Firefox上测试Rest-Client的基本身份验证时,我可以访问安全URL“/main”。但在响应头中,我得到Set-Cookie: JSESSIONID=301225C7AE7C74B0892887389996785D;
。
我不希望为基本身份验证生成cookie。我希望为基本身份验证生成真正的Stateless session
。请注意,我需要为表单登录生成cookie才能工作,因此禁用cookie不是一个选项。我知道xml配置中的create-session="stateless"
,但是否有任何方法可以在Java配置中做同样的事情,以便基本身份验证是无状态的,表单身份验证是有状态的..?
3条答案
按热度按时间mrfwxfqh1#
您可以执行以下操作。
对于您的问题,可以使用以下自定义Java Config。
此配置创建两种不同的身份验证机制。
对于任何以
/api/*
开头的请求,它将使用basicAuthenticationFilter
和securityContextPersistenceFilterASCFalse
,并带有Session Creation False。对于任何以
/*
开头的请求,它将使用usernamePasswordAuthenticationFilter
和securityContextPersistenceFilterASCTrue
,并设置Session Creation True。你可以利用这一点,并改变它,以满足您的问题。
8zzbczxx2#
对于其他遇到这个问题的人,这里还有一些需要检查的东西。
我在Sping Boot 中遇到了同样的问题,甚至
我仍然看到JSESSIONID cookie被设置。在我的情况下(使用JWT),缺少的部分似乎是在
HttpSessionSecurityContextRepository
对象上设置setAllowSessionCreation,如下所示:这是
HttpSessionSecurityContextRepository
中的这些行:jdg4fx2g3#
您需要在HttpSecurity对象中添加sessionCreationPolicy(SessionCreationPolicy.STATELESS),如下所示:
}