我是Spring Security的新手。我们在我的一个示例示例中使用Spring Security 5.4.5和Spring Boot。
我在下面的配置类中尝试在RESTAPI的/user和/adminendpoint中应用Spring Security身份验证/授权。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
PasswordEncoder bcryptPasswordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.anonymous().principal("guest").authorities("GUEST_ROLE")//Provide the name and role to the annonymous user
.and()
.authorizeRequests()
.antMatchers("/register").anonymous()//allows registration page to be accessed by annonymous users only
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/admin").hasAnyRole("ADMIN_ROLE")
.antMatchers(HttpMethod.GET,"/user").hasAnyRole("STUDENT_ROLE", "ADMIN_ROLE")
.and()
.httpBasic();
}
@Override
@Bean
protected UserDetailsService userDetailsService() {
UserDetails annaSmithUserDetails = User.builder()
.username("annasmith")
.password(bcryptPasswordEncoder.encode("password"))//default password enoder is bcrypt
.roles("STUDENT_ROLE", "ADMIN_ROLE") //role of the user
.authorities("STUDENT_READ","STUDENT_WRITE","COURSE_READ","COURSE_WRITE") //authorities or we can say permission assigned to the user
.build();
return new InMemoryUserDetailsManager(annaSmithUserDetails);//can configure different
}
}
根据上述Spring配置 /userUSER和ADMIN角色都可以访问, /adminADMIN角色也可以访问。
当我试图在浏览器中访问/user时,它会显示用户名和密码弹出窗口,一旦我输入配置用户的正确凭据,它就不工作,并给出403错误。
我有以下三个问题
通过启用spring调试日志,可以通过简单的谷歌搜索或在spring文档中找到如何做到这一点。学会调试你的应用程序(调试你的应用程序应该始终是你学习的第一件事,并且应该在询问堆栈溢出之前完成)。
上述Spring Security配置有什么问题,因为我无法访问REST APIendpoint?
由于您尚未透露如何访问应用程序,可能会出现一些问题。通过curl,web浏览器,在react应用程序中使用fetch的另一个webclient等也应该包括在询问堆栈溢出时,以便人们能够重现手头的问题。
但是列出一些可能出错的事情:
UserBuilder users=User。withDefaultPasswordEncoder()
在文档中构建用户时
如果要遵循任何标准,则应定义不带前缀或后缀的角色(_ROLE)
- 登录后是否重定向到不允许访问的内容
如您所见,有几件事可能是错误的,但您提供的信息太少,无法回答,在询问堆栈溢出之前,您可以做很多事情。
因为这个问题很模糊,所以答案很模糊。
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它
当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。
我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:
我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里
我正在使用Grails 2.0.1中的springsecurity插件。我的角色层次结构和其他s2属性如下所示。