Spring security 弹簧&x27;s用户详细信息服务

Spring security 弹簧&x27;s用户详细信息服务,spring-security,userdetailsservice,Spring Security,Userdetailsservice,我正在尝试在我的Spring启动应用程序中配置Spring安全性,以便仅允许某些用户访问某些URL,前提是他们具有特定角色,即创建用户时存储的用户或管理员角色。我已经看了几个例子,它们基本上符合我的要求。我对Spring的UserDetailsService界面有点困惑,当我试图访问像localhost:8080/addtour这样的URL时,我应该如何将用户名从我的用户传递到UserDetailsService。目前,我的代码如下所示: @数据 @范围(“会议”) 公共类用户{ @身份证 私有

我正在尝试在我的Spring启动应用程序中配置Spring安全性,以便仅允许某些用户访问某些URL,前提是他们具有特定角色,即创建用户时存储的用户或管理员角色。我已经看了几个例子,它们基本上符合我的要求。我对Spring的
UserDetailsService
界面有点困惑,当我试图访问像
localhost:8080/addtour
这样的URL时,我应该如何将用户名从我的用户传递到
UserDetailsService
。目前,我的代码如下所示:

@数据
@范围(“会议”)
公共类用户{
@身份证
私有字符串id;
私有字符串用户名;
私有字符串密码;
私有列表角色;
My
SecurityConfig
class:

@配置
@启用Web安全性
公共类SecurityConfig扩展了WebSecurity配置适配器{
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.formLogin()
.login页面(“/login”)
.permitAll()
.及()
.例外处理()
.accessDeniedPage(“/accessDeniedPage”)
.及()
.授权请求()
.antMatchers(“/resources/**”,“/signup”,“/search”).permitAll()
.antMatchers(“/viewtour”).hasAnyRole(“用户”、“管理员”)
.antMatchers(“/addtour”).hasAnyRole(“管理员”)
.及()
.logout()
.permitAll()
.logoutSuccessUrl(“/index.html”);
}
@凌驾
受保护的无效配置(AuthenticationManagerBuilder auth)引发异常{
auth.userDetailsService(新的UserDetailServiceImpl());
}
实现Springs
userdetailserviceinpl
UserDetailService

公共类UserDetailServiceImpl实现UserDetailsService{
@自动连线
私人用户服务;
@凌驾
public UserDetails loadUserByUsername(字符串用户名)引发UsernameNotFoundException{
试试{
User User=userService.retrieveUserByUserName(用户名);
如果(user==null){
返回null;
}  
返回新的org.springframework.security.core.userdetails.User(User.getUserName()、User.getPassword()、getAuthorities(User));
}捕获(例外e){
抛出新的UsernameNotFoundException(“未找到用户”);
}  
}  
私有集GetAuthories(用户){
Set authorities=new HashSet();
对于(角色:user.getRoles()){
GrantedAuthority GrantedAuthority=新的SimpleGrantedAuthority(role.toString());
权限。添加(授权权限);
}  
System.out.println(“用户权限为”+authorities.toString());
返回当局;
}
使用Thymeleaf的我的登录页面:



登录或
用户名 或电子邮件

密码 记得我吗
登录页面中的参数名称错误,请参阅

  • :

    执行身份验证时查找用户名的HTTP参数。默认值为“username”

  • :

    执行身份验证时查找密码的HTTP参数。默认值为“password”


更改登录页面中参数的名称,或更改
SecurityConfig

中的名称,当我点击“是”时,它会将我重新引导到“可以输入用户名和密码的位置”。当a在loadUserByUsername()中的userService.retrieveUserByUserName行上放置断点时方法用户名为空,因此我不确定我是否配置了错误的内容,或者我根本没有配置任何内容。我更改了登录表单中的用户名/密码值,并且成功了!感谢您的帮助!