2015-05-20 1 views
3

У меня есть REST-интерфейс, который вызывается из кода Front-End через jquery-Ajax-Requests. Вызываемый URL обеспечивается следующими shiro.ini:Фильтр Shiro без перенаправления

/api/** = authc 

Если пользователь не прошел проверку подлинности Shiro хочет перенаправить к авторизации для URL и Ajax-запрос не может справиться с этим. Я бы предпочел код статуса HTML в качестве ответа. Каков наилучший способ достичь этого? Спасибо за любые ответы!

ответ

4

Вам необходимо реализовать специальный фильтр сиро. Что-то вроде этого:

 import javax.servlet.ServletRequest; 
     import javax.servlet.ServletResponse; 

     import java.io.IOException ; 
     import javax.servlet.http.HttpServletResponse ; 

     import org.apache.shiro.web.filter.authz.AuthorizationFilter ; 
     import org.apache.shiro.web.util.WebUtils ; 

     public class LocalhostFilter extends AuthorizationFilter { 

      private static final String message = "Access denied."; 

      @Override 
      protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { 
       //do something when access allowed 
       return true;  
} 

      @Override 
      protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException { 
       HttpServletResponse httpResponse ; 
       try { httpResponse = WebUtils.toHttp(response); } 
       catch (ClassCastException ex) { 
        // Not a HTTP Servlet operation 
        return super.onAccessDenied(request, response) ; 
       } 
       if (message == null) 
        httpResponse.sendError(403) ; 
       else 
        httpResponse.sendError(403, message) ; 
       return false ; // No further processing. 
      } 
     } 
+0

Спасибо, я получил это работает за счет расширения FormAuthenticationFilter. Ты посадил меня на правильный путь. – user1305241

+0

Как настроить свой контекст приложения, чтобы он использовал этот настраиваемый фильтр? –