weixin_33712881 2015-05-20 08:37 采纳率: 0%
浏览 92

没有重定向的Shiro过滤器

I have a REST-Interface that gets called from the Front-End code via jquery-Ajax-Requests. The called url is secured with the following shiro.ini:

/api/** = authc

If the user is not authenticated Shiro wants to redirect to the login-Url and the ajax-Request can't handle that. I'd prefer a HTML status code as answer. What's the best way to achieve this? Thanks for any answers!

  • 写回答

2条回答 默认 最新

  • weixin_33736048 2015-05-20 09:00
    关注

    You need to implement a custom shiro filter. Something like this:

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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵