Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JAVA角色访问时发生Spring Security 403错误_Java_Spring - Fatal编程技术网

使用JAVA角色访问时发生Spring Security 403错误

使用JAVA角色访问时发生Spring Security 403错误,java,spring,Java,Spring,所有用户都可以成功登录,但所有用户只能打开使用permitAll()方法的url。对于url meta,我已经设置了角色“RADMIN”,在具有该角色的用户登录后,由于403错误,他无法打开meta或任何其他url。可以打开的url只有“登录”、“注销”、“主页” AuthService @Service public class AuthenticationService implements UserDetailsService { @Autowired private A

所有用户都可以成功登录,但所有用户只能打开使用permitAll()方法的url。对于url meta,我已经设置了角色“RADMIN”,在具有该角色的用户登录后,由于403错误,他无法打开meta或任何其他url。可以打开的url只有“登录”、“注销”、“主页”

AuthService

@Service
public class AuthenticationService implements UserDetailsService {

    @Autowired
    private AuthDao authDao;

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {

        AuthModel authModel = authDao.getUserInfo(email);
        GrantedAuthority authority = new SimpleGrantedAuthority(authModel.getRank());
        UserDetails userDetails = (UserDetails) new User(authModel.getName(), authModel.getPass(), Arrays.asList(authority));
        return userDetails;
    }

}

如果使用
hasAuthority()
方法检查用户的角色,则还应在角色名称前添加前缀
role\uu
。因此,检查角色的安全配置部分应如下所示:

.antMatchers("meta/**").hasAuthority("ROLE_RADMIN")

或者,您可以使用
hasRole(“RADMIN”)
代替
hasRole(“RADMIN”)

如果您正在使用
hasAuthority()
方法检查用户的角色,则还应在角色名称前添加前缀
role\uuu
。因此,检查角色的安全配置部分应如下所示:

.antMatchers("meta/**").hasAuthority("ROLE_RADMIN")

或者,您可以使用
hasRole(“RADMIN”)
代替
hasRole(“RADMIN”)

什么是
authModel.getRank()
返回的?对于我给您的解决方案,如果
authModel.getRank()
返回
ROLE\u RADMIN
,这应该可以工作。如果它返回
RADMIN
它们,那么您编写的代码应该可以(与
hasAuthority(“RADMIN”)
一起使用)。从上面编写的代码中,我无法判断什么可能是错误的。尝试调试并查看
authModel.getRank()
返回的是什么。authModel.getRank()返回ROLE_RADMIN。我使用硬编码值对其进行了测试,结果正常。现在我发现了问题,但不知道如何解决它…原因是此方法loadUserByUsername未被调用,我不知道如何执行此操作。此方法仅在对用户进行身份验证时被调用。这意味着您首先需要登录,以便在会话中保存了一个用户。之后一切都会正常工作。无论如何,您需要弄清楚这一点。通过我的回答中提供的更改,您将不再收到
403
。检查此设置以获得简单的HTTP基本身份验证:谢谢。我将再次尝试调试它。什么是
authModel.getRank()
returning?对于我给你的解决方案,如果
authModel.getRank()
returns
ROLE\u RADMIN
,这应该可以工作。如果它返回
RADMIN
,那么你写的代码应该可以(与
hasAuthority(“RADMIN”)一起使用)
。从上面编写的代码中,我无法判断哪些是错误的。请尝试调试并查看
authModel.getRank()
返回的是什么。authModel.getRank()返回ROLE_RADMIN。我使用硬编码值对其进行了测试,结果正常。现在我发现了问题,但不知道如何解决它…原因是此方法loadUserByUsername未被调用,我不知道如何执行此操作。此方法仅在对用户进行身份验证时被调用。这意味着您首先需要登录,以便会话中保存了一个用户。在这之后,应该可以正常工作。无论如何,您需要弄清楚这一点。通过我的回答中提供的更改,您将不再收到
403
。请检查此设置以获得简单的HTTP基本身份验证:谢谢。我将再次尝试调试它。