gpt4 book ai didi

java - 带预身份验证的 Spring Security 自定义异常处理程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:52 32 4
gpt4 key购买 nike

我正在尝试使用 Spring Security 3.1.2 配置一些自定义异常处理。我尝试按照我发现的示例 herehere ,但两者都不起作用。我是 Spring Security 的新手,我想知道这是否与我使用预身份验证过滤器有关。我从 AuthenticationUserDetailsS​​ervice 实现的 loadUserDetails() 方法中抛出自定义异常。

public class AuthServiceImpl implements AuthenticationUserDetailsService<Authentication> {
@Autowired
private AuthDao authDao;

@Override
public UserDetails loadUserDetails(Authentication auth) throws UsernameNotFoundException {
Request req = (Request) auth.getPrincipal();

//get user details
User u = authDao.loadUser(req.getSessionId());

//check user rights for requested action
if(!u.getRights().contains(req.getAction()){
throw new CustomAuthException("User does not have permission to perform this action");
}

return u;
}
}

当抛出异常时,我只会得到带有异常详细信息的正常 Tomcat 500 页面。无论出于何种原因,我的自定义异常根本没有得到处理。我什至在自定义处理程序中添加了一些 println() ,但它甚至没有被调用。

我开始怀疑这个方法是否以某种方式被排除在 Spring 的异常处理之外。如果需要,我可以提供更多代码示例,但目前我不确定哪些内容值得分享。

最佳答案

您使用SimpleMappingExceptionResolver。它是一个 Spring MVC 组件。因此,当您在执行某个 Controller 期间出现异常时,DispatcherServlet 将调用 SimpleMappingExceptionResolver。问题是您的 AuthenticationUserDetailsS​​ervice 实现仅在登录操作期间使用。并且此操作直接由Spring Security过滤器处理(不使用Spring MVC)。请求未到达 DispatcherServlet,并且在这种情况下永远不会调用 SimpleMappingExceptionResolver。

关于java - 带预身份验证的 Spring Security 自定义异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674021/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com