0

我的设置

在 Spring MVC 3.1 应用程序中,我有一个受 Spring Security 保护的服务:

@PreAuthorize("isAnonymous()") // ("hasRole('USER')") doesn't work either
public interface UserService extends UserDetailsService, PasswordEncoder

我正在尝试通过在我的上下文中声明的 bean 的 init() 方法使用此服务:

<bean class="com.xxx.scripts.FillDbWithInitialValues" init-method="contextInit" />

班上 :

public class FillDbWithInitialValues
{
    @Autowired
    UserService userService;

    public void contextInit()
    {
        User test = userService.getUser(1);
    }
}

我的 security.xml 文件的提取:

<sec:global-method-security pre-post-annotations="enabled" />   

<sec:http auto-config="true" use-expressions="true">
    (...)
</sec:http>

<sec:authentication-manager alias="authManager">
    <sec:authentication-provider user-service-ref="userService">
        <sec:password-encoder ref="userService" />
    </sec:authentication-provider>
</sec:authentication-manager>

问题

当我启动应用程序时,我得到一个异常:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext

为什么会这样?如何对我的 bean 进行“身份验证”以便它可以使用该服务?

4

1 回答 1

0

如果没有经过身份验证的用户,则无法检查他的角色。如果您希望在调用该方法之前对该 bean 进行身份验证,我认为您可以尝试以下方式:

SecurityContextHolder.getContext().setAuthentication(new user here);  
User test = userService.getUser(1);
于 2012-05-04T21:10:56.417 回答