java SecurityContextHolder尽管成功登录,但仍承载匿名用户
这里的第一个问题,我是spring和spring Security的新手,我目前正在做一个小项目,涉及一个使用ReactJS和spring Boot的简单身份验证系统,我遇到了一个问题,成功登录后,服务器无法提供当前登录的用户,默认为匿名用户,我怀疑在更改实现WebSecurityConfigurerAdapter
接口的类的配置时,我在不知不觉中犯了一个错误,因为在我进行这些更改之前,它就已经工作了。除此之外,我在这一点上一无所知
所以一个回顾,注册就像一个符咒,登录工作,并执行一个方法,表明它是成功的,但似乎不能保存会话
这是我的config类中实现WebSecurityConfigurerAdapter
接口的configure方法:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().disable().csrf().disable();
http.authorizeRequests()
.antMatchers("/resources/**" , "/register")
.permitAll()
.anyRequest().authenticated()
.and().formLogin()
.failureHandler(handleFailure())
.successHandler(handleSuccess())
.permitAll()
.and()
.cors();
}
这是用来返回我想要获取的值的代码
@GetMapping(path="/userdetails")
public ResponseEntity<Object> getUserDetails(){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
return createResponse(auth.getPrincipal(),HttpStatus.OK);
}
我很乐意提供更多的代码示例,因为我不想在这里粘贴太多代码,因为坦率地说,我不知道问题的根源在哪里
编辑: 这是我用来发送登录表单的jquery方法
$.post(`${__SERVER}/login` , $("#login-form").serialize())
我是不是误解了什么?文档中说,发送登录表单的默认端点是/login(如果未指定)
这是用于注册的url字符串:
http://localhost:8080/register?username=example@mail.com&password=asdfasdf&passwordConfirm=asdfasdf
这是用于登录表单的
http://localhost:8080/login?username=example@mail.com&password=asdfasdf
在服务器中调试它们表明,它们确实到达了,并且被整齐地包装在各自的对象中,但不知怎的,它就是不起作用
截图:
Response headers after a supposed successful login
Headers after requesting for the currently authenticated user.
更新: 显然,一些用户在使用microsoft edge时遇到了与我类似的问题:set-cookie header not setting cookie in Edge
所以我安装了其他浏览器只是为了检查,不幸的是,没有一个浏览器能够解决这个问题
我决定玩一些我在网上找到的教程,我偶然发现了这个:https://hellokoding.com/spring-boot/security-login-mysql-jsp/
创建了教程回购协议的副本,然后进行了增量更改,引起我注意(并最终解决了这个问题)的是以下代码
spring.mvc.view.prefix = /
在我的应用程序属性中找到,我将其插入到我的属性文件中,它成功了!,什么
有人能解释一下这种改变是如何以及为什么起作用的吗
整个模型在这一点上似乎如此混乱,任何澄清将不胜感激
共 (0) 个答案