gpt4 book ai didi

java - Spring Security 休息登录

转载 作者:行者123 更新时间:2023-12-02 11:02:23 25 4
gpt4 key购买 nike

我尝试使用 api 编写 Web REST 后端。现在我可以对任何发送用户数据的请求进行授权,如下所示: enter image description here

但我不喜欢这样,我只想使用一个资源进行授权 /api/user/login

我有这个CustomWebSecurityConfigurerAdapter.java:

@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

@Autowired
private DataSource dataSource;

@Autowired
private AuthenticationEntryPoint authenticationEntryPoint;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"select username, password, true from users where username=?")
.authoritiesByUsernameQuery(
"select username, role from users where username=?")
.passwordEncoder(new BCryptPasswordEncoder());
}

@Override
public void configure(WebSecurity web) {
web.ignoring()
.antMatchers("/api/test/getting")
.antMatchers("/api/user/register")
.antMatchers("/webjars/**")
.antMatchers("/api/swagger-resources/configuration/ui")
.antMatchers("/swagger-ui.html*");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint);
}
}

你能解释一下它是如何工作的吗?

最佳答案

这是 Spring Security 的安全层。所有的请求都必须经过它。

以下部分重写 WebSecurityConfigurerAdapter 中的方法来配置身份验证
对于除少数 URL 之外的每个请求(/api/test/getting/api/user/register/webjars/**/api/swagger-resources/configuration/ui,/swagger-ui.html*),因为这些在方法 public void configure( WebSecurity web)

所有请求都带有基本身份验证 token (加密),并且该值将从数据库表(用户和角色)中进行验证。如果用户凭证有效并且具有有效的角色,那么它将进入下一步,否则它将给出 401 HTTP 响应。在数据库选项卡中,必须像我们使用的那样对文件进行编码和保存

.passwordEncoder(new BCryptPasswordEncoder())

代码部分:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"select username, password, true from users where username=?")
.authoritiesByUsernameQuery(
"select username, role from users where username=?")
.passwordEncoder(new BCryptPasswordEncoder());
}

下面的部分是告诉应用程序所有请求都是HTTP请求,并且所有请求都必须通过基本身份验证(.httpBasic())进行身份验证

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint);
}

关于java - Spring Security 休息登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com