Spring Security 3.1.2 でいくつかのカスタム例外処理を構成しようとしています。こことここで見つけた例に従ってみましたが、どちらも機能しません。私は Spring Security を初めて使用します。これは、事前認証フィルターを使用しているという事実と関係があるのではないかと考えています。AuthenticationUserDetailsService 実装の 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 の例外処理から除外されているのではないかと考え始めています。必要に応じてさらに多くのコード例を提供できますが、現時点では、共有に関連するものは何かわかりません。