spring-security 相关问题

Spring Security是Spring Framework的应用程序安全解决方案。 Spring安全性可用于保护URL和方法调用。它广泛用于保护独立的Web应用程序,portlet和越来越多的REST应用程序。

如何在分区多租户 Spring 应用程序中的自定义登录语句中获取租户 id?

我得到了一个几乎可以工作(分区)的多租户 Spring 应用程序。唯一剩下的障碍是自定义登录语句。下面的 SQL 是虚构的,但没有详细说明问题

回答 1 投票 0

.headers().frameOptions().disable() 是如何工作的?

关于 Spring Security 让、控制和访问 h2 Web 控制台 我读了这两篇文章: Spring Boot /h2-console 使用 Spring Security 1.5.2 抛出 403 H2 控制台和 Spring Security -

回答 2 投票 0

停止spring security自动生成密码

我试图使用Spring Security为我的网站添加身份验证我试图停止自动生成Spring Security的密码代码没有错误但我无法停止密码生成 @

回答 1 投票 0

Spring Security如何将principal注入到Controller中?

我可以像下面的代码一样获取用户主体,但我很困惑Spring Security如何知道注入正确的主体。通常,我们会传递 args 来调用带参数的方法。那么,哪里

回答 2 投票 0

带有自定义登录页面的 Spring Security 6 中的错误 405

包com.scm.configurations; 导入 org.springframework.context.annotation.Bean; 导入 org.springframework.context.annotation.Configuration; 导入 org.springframework.security.authentication.

回答 1 投票 0

我无法获得授权,我需要注册

导入java.util.可选; 导入 org.springframework.data.jpa.repository.JpaRepository; 导入 com.example.secure.models.User; 公共接口 UserRepository 扩展了 JpaRepository import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import com.example.secure.models.User; public interface UserRepository extends JpaRepository<User,Integer>{ Optional<User> findAppUserByUsername(String username); } import com.example.secure.repository.UserRepository; import com.example.secure.models.User; import org.springframework.stereotype.Service; @Service public class UserDetailsServiceImpl implements UserDetailsService { private final UserRepository appUserRepository; public UserDetailsServiceImpl(UserRepository appUserRepository) { this.appUserRepository = appUserRepository; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = appUserRepository .findAppUserByUsername(username) .orElseThrow(() -> new UsernameNotFoundException("Not found")); return org.springframework.security.core.userdetails.User.withUsername(user.getUsername()) .password(user.getPassword()) .roles(user.getAuthority()) .build(); } } @Entity public class User{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String username; private String password; private String authority; //constructors setters and getters } import java.util.Collection; import java.util.List; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; public class UserAdapter implements UserDetails { private User user; public UserAdapter(User user){ this.user=user; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return List.of(new SimpleGrantedAuthority(user.getAuthority())); } @Override public String getPassword() { return user.getPassword(); } @Override public String getUsername() { return user.getUsername(); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } } import com.example.secure.models.User; import com.example.secure.repository.UserRepository; @RestController public class SecurityController { private final UserRepository repo; private final PasswordEncoder passwordEncoder; public SecurityController(UserRepository repo, PasswordEncoder passwordEncoder) { this.repo = repo; this.passwordEncoder = passwordEncoder; } @PostMapping(path = "/register") public String register(@RequestBody RegistrationRequest request) { User user = new User(); System.out.println("Controller started"); user.setUsername(request.username()); user.setPassword(passwordEncoder.encode(request.password())); user.setAuthority(request.authority()); System.out.println(user.toString()); repo.save(user); System.out.println("Controller ended"); return "New user successfully registered"; } @GetMapping(path = "/test") public String test() { return "Access to '/test' granted"; } record RegistrationRequest(String username, String password, String authority) { } } import com.example.secure.service.UserDetailsServiceImpl; @Configuration @EnableWebSecurity(debug = true) public class SecurityConfig { private UserDetailsServiceImpl userDetailsService; public SecurityConfig(UserDetailsServiceImpl userDetailsService) { this.userDetailsService = userDetailsService; } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf(configurer -> configurer.disable()) .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.GET, "/test").hasAuthority("ROLE_USER") .requestMatchers(HttpMethod.POST, "/register").permitAll() .anyRequest().denyAll()) .httpBasic(Customizer.withDefaults()) .userDetailsService(userDetailsService); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } 以上是我的项目相关的Spring Security代码,当我尝试使用Postman访问端点时,该代码不起作用。当我从 Postman 调用“est”端点时,会从数据库中获取详细信息,但我无法访问该端点。我收到 401 状态代码,如图所示。来自邮递员的 401 状态代码显示响应标头的图像 我从过去两天开始尝试,但无法得到它。 我预计问题是什么以及如何解决。 您有 UserAdapter 类,但实现不完整。请使用以下 UserAdapter 类。 loadUserByUsername():这个抽象方法将返回 UserDetails 类实例,这就是为什么我们必须使用 UserAdapter 类来实现 UserDetails public class UserAdapter implements UserDetails { private String username; private String password; private List<GrantedAuthority> authorities; public UserAdapter(User user){ this.username = user.getUsername(); this.password = user.getPassword(); this.authorities = Stream.of(user.getAuthority().split(",")).map(SimpleGrantedAuthority::new).collect( Collectors.toList()); } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return this.authorities; } @Override public String getPassword() { return this.password; } @Override public String getUsername() { return this.username; } @Override public boolean isAccountNonExpired() { return false; } @Override public boolean isAccountNonLocked() { return false; } @Override public boolean isCredentialsNonExpired() { return false; } @Override public boolean isEnabled() { return false; } } 接下来创建一个单独的类并实现 AuthenticationProvider,因此此实现将帮助提供商管理器识别此客户身份验证 @Component public class CustomizeAuthProvider implements AuthenticationProvider { private final UserDetailsService userDetailsService; public CustomizeAuthProvider(UserDetailsService userDetailsService) { this.userDetailsService = userDetailsService; } @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { try{ UserDetails userDetails = userDetailsService.loadUserByUsername(authentication.getName()); return new UsernamePasswordAuthenticationToken(userDetails.getUsername(),userDetails.getPassword(),userDetails.getAuthorities()); }catch (UsernameNotFoundException e){ throw new BadCredentialsException("Credentials is invalid"); } } @Override public boolean supports(Class<?> authentication) { return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication); } } 替换 UserDetailsServiceImpl 类中的 loadUserByserName 方法 @Override public UserAdapter loadUserByUsername(String username) throws UsernameNotFoundException { Optional<User> user = appUserRepository.findAppUserByUsername(username); return user.map(UserAdapter::new).orElseThrow(()->new UsernameNotFoundException("Not found")); } 还用以下代码更新 securityConfig 方法 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.GET, "/test").hasAuthority("ROLE_USER") .requestMatchers(HttpMethod.POST, "/register").permitAll() .anyRequest().denyAll()) .httpBasic(Customizer.withDefaults()) //here we are providing customer authentication provider .authenticationProvider(authenticationProvider) .userDetailsService(userDetailsService); return http.build(); } 希望这对您有帮助

回答 1 投票 0

@PreAuthorize(permitAll) 仍然需要身份验证

我的存储库中有以下示例方法(带有 @RepositoryRestResource 注释): @覆盖 @PreAuthorize(“允许全部”) @PostAuthorize("permitAll") 公共可迭代 findAll...

回答 2 投票 0

Hibernate 不获取ManyToMany 关系数据

我正在尝试使用 Hibernate 从数据库读取数据。 我有以下数据模型,其中保存一些用户凭据数据,分为多个实体,其中实体 C 保存用户授权

回答 1 投票 0

全局 CORS 配置不起作用 - 无效的 CORS 请求

我在项目中实施 CORS 时遇到问题。也许这里有人可以帮助我。 问题:我在实施 CORS 时收到“无效的 CORS 请求”响应。 我的

回答 1 投票 0

Spring GraphQL 身份验证错误处理

我在我的项目中使用 Spring GraphQL 和 Spring Security。我正在使用 JWT 对用户进行身份验证,因此我有一个安全过滤器来检查令牌的有效性。当令牌无效时,异常...

回答 1 投票 0

使用 spring security 6.2.4 但我在 HttpSecurity 中找不到 hasScope 检查

根据本文档https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html 导入 org.springframework.security.oauth2.core.authorization.

回答 1 投票 0

JwtAuthenticationToken 不在白名单中,Jackson 问题

我使用 org.springframework.security:spring-security-oauth2-authorization-server:0.2.2 创建了我的授权服务器,并使用 org.springframework.boot:spring-boot-starter-oauth2-c 创建了我的客户端。 .

回答 4 投票 0

Spring Security 是否尝试向客户授权公共端点?

假设我有一个只能由经过身份验证的用户访问的端点, 现在我想向非授权用户授予访问权限。 我是否需要期望 Spring Security 会尝试

回答 1 投票 0

使用 OAuth2 下载 Javascript 文件

我正在开发一个单页面,客户端使用Javascript+AngularJS,服务器端使用Spring MVC + Spring Security OAuth2。 Spring MVC 充当任何 AJAX 请求的 REST 控制器...

回答 3 投票 0

JWTEncoder:无法选择 JWK 签名密钥

我在一个应用程序中有一个身份验证服务器+资源服务器。我花了很多时间搜索和调试,但与此相关的 Spring Boot 3.+ 的更新页面或主题并不多。所以,我有...

回答 2 投票 0

Spring Boot 提供被安全阻止的静态内容

我启动了 Spring Boot + Angular 应用程序,现在我想将整个应用程序部署为 jar。所以我创建了 Maven 配置,其中构建了 Angular 应用程序,然后将其复制到 /target/classes/resource...

回答 7 投票 0

使用 Spring Security BCryptPasswordEncoder 进行哈希密码时的凭据错误

我正在使用新的 BCryptPasswordEncoder 将用户密码散列到数据库(在我的例子中是 MongoDB)。当我刚刚测试登录时,我将安全配置中的密码编码器设置为 b...

回答 2 投票 0

如何在 springboot api 应用程序中验证和解码 azure ad jwt 令牌?

我有react应用程序使用的springboot api应用程序。 在react应用程序中,我通过了azure ad的身份验证,并获取了发送到springboot api的jwt idToken。 我想做的事情是...

回答 1 投票 0

使用以下代码传递POST请求时面临401未经授权|春季安全

当然可以!您可以将以下文本直接粘贴到您的 Stack Overflow 问题中: 标题:Spring Security POST 请求因 401 未经授权而失败 描述: 我的

回答 2 投票 0

Spring 安全性导致 404 并显示消息“无静态资源登录”

设法生成一个简单的示例。尝试了很多谷歌搜索,但没有一个答案有帮助。 简单的测试代码: 导入 org.junit.jupiter.api.Test; 导入 org.springframework.beans.factory.annotation.

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.