Я нашел только один способ, как изменить перенаправление на login.jsp для ответа с 401.
Вы должны создать свой собственный фильтр, который будет расширять org.apache.shiro.web.filter.authc.FormAuthenticationFilter и переопределите метод saveRequestAndRedirectToLogin ().
public class SecurityAuthenticationFilter extends FormAuthenticationFilter {
@Override
protected void saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
saveRequest(request);
sendChallenge(response);
}
protected void sendChallenge(ServletResponse response) {
HttpServletResponse httpResponse = WebUtils.toHttp(response);
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}
Я использую интеграцию Guice + Shiro.Итак, этот фильтр добавляется так же, как в org.apache.shiro.guice.web.ShiroWebModule.
public class SecurityModule extends ShiroWebModule {
public static final Key<SecurityAuthenticationFilter> AUTHC_REST = Key.get(SecurityAuthenticationFilter.class);
...
@Override
protected void configureShiroWeb() {
...
// Add as filter
addFilterChain("/rest/login", ANON);
addFilterChain("/rest/**", AUTHC_REST);
...
}
}
Для файла shiro.ini его следует добавить следующим образом:
[main]
authc = package.path.to.SecurityAuthenticationFilter
[urls]
/rest/login = anon
/rest/** = authc
Это должно работать:)