【发布时间】:2018-09-06 17:22:41
【问题描述】:
我为表单登录开发了一个简单的 Spring boot 和 Spring Security,配置如下
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/registration").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
http.csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
}
我还创建了自定义 userDetailsService 实现来获取用户。
现在,当我使用登录表单从网页登录时,我能够成功登录并能够访问受保护的端点(我也能够在后续响应中看到 JSESSIONID。
但是,当我尝试使用带有 url 的 httpPost:http://localhost:9090/login 通过不同的服务(Android 应用程序)登录时,我可以看到用户已通过身份验证。
但我随后无法从 android 应用程序访问安全端点。响应返回一个HTML 字符串(登录页面数据)。
我也看不到回复中的JSESSIONID。
总的来说,我的配置在网页上运行良好,但无法从其他 api 上运行。
【问题讨论】:
标签: web-services spring-boot spring-security