Shiro过滤器没有重定向

时间:2015-05-20 08:37:49

标签: java ajax shiro

我有一个REST接口,可以通过jquery-Ajax-Requests从前端代码调用。被叫url使用以下shiro.ini进行保护:

/api/** = authc

如果用户未经过身份验证,则Shiro希望重定向到login-url,而ajax-Request无法处理。我更喜欢HTML状态代码作为答案。 实现这一目标的最佳方法是什么?谢谢你的回答!

2 个答案:

答案 0 :(得分:4)

您需要实现自定义shiro过滤器。 像这样:

        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.
            }
        }

答案 1 :(得分:0)

回答问题:

  

如何配置我的应用程序上下文,告诉他使用此自定义shiro过滤器?

应用程序上下文将从 shiro.ini 文件中获取更改。在[main]部分中定义自定义过滤器,并在适用的网址格式的[urls]部分中使用它。

[main]
myLocalhostFilter = my.package.LocalhostFilter

...

[urls]
...
/api/** = myLocalhostFilter