java - 在 Spring MVC rest api 中实现用户认证
问题描述
我已经构建了一个基本的 crud spring mvc rest api,并希望添加基本身份验证以验证用户并添加登录和注销。我找到了一个涵盖 spring mvc 的教程。
我已经尝试实现基本身份验证,代码如下:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
UserBuilder users = User.withDefaultPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(users.username("marie").password("yourmarie").roles("USER"));
}
使用上面的代码,它提供身份验证,但是当凭据无效时,它会返回异常。相反,如果可能,我希望返回某种 jason 或消息,以便我可以根据返回的值在前端处理操作。
另一方面,如果我尝试在没有身份验证的情况下访问端点,它会给我一个登录表单。在这里,我也想要一个回应。
另外,还想添加注销功能。
请指导。提前致谢!
解决方案
如果您发现异常,而凭据无效,则只需在控制器中捕获异常。并创建您自己的身份验证异常并使用正确的消息将其抛出。
catch (Exception ae) { throw new AuthenticationException("Invalid credentials"); }
对于注销,您需要从存储(内存)中删除令牌您可以在请求中检查令牌,如下所示
(StringUtils.hasText(httpServletRequest.getHeader("Authorization"))) { String access_token = request.getHeader("Authorization"); }
推荐阅读
- sql - SQL - 如何跨行旋转和组合数据
- flutter - Flutter Json 单例数据库
- bash - 在 macOS shell 脚本上转义空格
- java - 如何为具有多个可调用语句的 Executor 服务编写 Junit 测试用例
- c# - var 与其他关键字有何不同?
- cordova - 在部署有关 apache cordova 4.1.1 或更高版本的构建时,我遇到了来自 google play 控制台的漏洞问题
- dart - 可以在构造函数中调用异步方法吗?
- c# - SQL 唯一索引阻止来自 Json API 的所有数据的所有 Db 输入
- python - 将进度条绑定到线程
- python - 如何在 discord.py 机器人加入语音通道之间添加暂停?