在我的控制器中,我有两个endpoint,其中一个是安全的,另一个是公共的:
@GetMapping("/public")
public String getPublic() {
return "public";
}
@PreAuthorize("hasRole('USER')")
@GetMapping("/private")
public String getPrivate() {
return "public";
}
仅当我已记录且具有正确角色的令牌放置在请求标头中时,受保护的终结点才有效。但是,当我想在没有令牌的情况下访问公共终结点时,我总是得到状态401,但有错误
需要完全身份验证才能访问此资源
这是我的安全配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests().anyRequest().authenticated()
.and()
.csrf().disable();
}
}
和授权服务器配置:
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
private final UserDetailsService appUserDetailService;
private final AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints
.tokenStore(tokenStore())
.tokenEnhancer(tokenEnhancer())
.authenticationManager(authenticationManager)
.userDetailsService(appUserDetailService);
}
}
我还尝试将.authorizeRequests().anyRequest().authenticated()
更改为:.authorizeRequests().anyRequest().permitAll()
没有更改。我的首选方法是使用注释处理安全性。谢谢。
antMatchers() 将做到这一点。我们经常使用它。最好将不安全的endpoint放在不同的类中,并通过请求映射在类级别控制安全性。
antMatchers("/public").permitAll()
链接到Spring Security api-https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/web/builders/HttpSecurity.html#antMatcher-java.lang.String-
你有两个选择,可以选择任何一个。
选项1:在您的endpoint中,像这样更改。
@PreAuthorize("permitAll()")
@GetMapping("/public")
public String getPublic() {
return "public";
}
并更改<code>configure(HttpSecurity http)</code>方法,如下所示。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest().permitAll()
.and()
.csrf().disable();
}
选项2:在您的配置(HttpSecurity http)
方法中,只需这样做。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/public").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
}
我的Quarkus申请一直面临一个问题。该应用程序在本地开发模式下运行时可以正常工作,但是当它作为本地映像构建时,我面临一些奇怪的问题。 遇到的错误: 访问私有intjava.util.ArrayList.size的偏移量时,不首先将字段注册为不安全访问。 org.hibernate.type.serializationexception不能反序列化 java.io.InvalidClassExc
因此,我们创建了一个包含一些私有类成员的简单类,并自动为其生成getter。但getter实际上返回了对该成员的引用,从而获得了对私有成员的完全访问权。这样可以吗?下面是一个类的代码: 主要方法代码: 和输出: [字符串1,字符串2] [字符串1、字符串2、字符串3] 我已经将getter更改为这个: 但问题仍然是,如果不是为了安全,吸气剂的作用是什么?什么是正确的书写方式?
我在eclipse中初始化了一个SpringBoot Rest,并使其成为一个动态Web项目。遵循了三轮胎原则,并在控制器类中声明了endpointURL。项目部署良好,但一旦我尝试访问返回404错误的endpoint。请参阅下面的示例。二手编译器-Maven和服务器-apache tomcat 9.0 主类.java } 示例控制器类
我被要求支持2个URL,以便JMX访问我们的服务器: 一个安全的(服务:jmx:rmi://localhost/jndi/rmi://localhost:2020/jmxrmi)不安全:(服务:jmx:rmi://localhost/jndi/rmi://localhost:2020/insecure-jmxrmi) 不安全的主要用于演示目的-不,它不会在生产过程中使用。 我可以为 /jmxrmi
我有1个VPC——在1个EC2实例(amazon ami)和1个Redis(支持群集模式)下,使用Auth(密码)和对所有IP:端口开放的安全组(仅用于测试)——设置非常简单。 telnet在我的EC2实例(配置endpoint)的6379端口工作 无法使用Redis CLI连接到Redis服务器-无论是配置endpoint还是节点endpoint都无关紧要;使用v.5.0.4版本的Redis C
我的Spring Security性有问题,因为当我登录到这个站点时,我无法通过角色admin访问url。这是我的安全配置 我试图与hasRole, hasAuthure, hasAny权威,但不工作,只有工作许可所有,但我不想访问的东西url用户与角色用户 这是我的登录控制器 我在数据库中有两个用户,一个是角色管理员,第二个是角色用户,但这不起作用,有人能解释为什么吗? https://gith