Это, как правило, зависит от выбранной структуры MVC:
- Некоторые механизмы пользовательского интерфейса (например, JSP) позволяют вам иметь «страницу ошибки», которую можно использовать для обработки любого исключения.
- Более элегантные интерфейсы пользовательского интерфейса имеют «улавливать все» обработчики и/или контроллеры исключений, которые позволяют вам делать все, что вы хотите (проверяйте исключение, устанавливаете код состояния HTTP, перенаправляете конечного пользователя на страницу с ошибкой, специфичную для этой конкретной проблемы , и т.д).
Однако, если вы не хотите использовать механизм MVC для этого, можно создать сервлет фильтр, который будет делать это:
Фильтр будет выполнять FilterChain в/поймать блок Ьгу , перехватывая исключение AuthorizationException. Если он ловит один, он выдает 302 перенаправление на «unauthorizedUrl».
Причина существующих фильтры Широ не делают это потому, что они разрешают Субъект перед когда-либо вызов FilterChain: , если тема не соответствуют критериям авторизации, цепочки фильтров никогда даже не вызывается (и, следовательно, нет Авторизация Исключение для catch).
Если вы хотите увидеть альтернативное поведение в Сиро, напишите issue и обсудите его как потенциальную новую функцию.
В Shiro 1.2.1 любое исключение Shiro обернуто в общее представление ServletException. См. AbstractShiroFilter.doFilterInternal. Таким образом, захват ShiroException в вашем фильтре не будет работать. –