【问题标题】:override shiro unauthorized page覆盖 shiro 未经授权的页面
【发布时间】:2011-12-15 22:31:48
【问题描述】:

我需要知道如何覆盖 shiro 未经授权的页面。即,当用户对受保护的 url 没有某些权限时,shiro 返回页面 401。我们如何使其将用户转发到预定义的未经授权的页面?

谢谢...

【问题讨论】:

    标签: security shiro


    【解决方案1】:

    我只找到了一种方法,如何将重定向到 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
    

    这应该工作:)

    【讨论】:

      【解决方案2】:

      :) 我需要相反的方式,我想获得401 而不是重定向(302)。您当前的设置是什么?你能从shiro.ini文件中配置这个吗?

      【讨论】:

        【解决方案3】:

        不确定您使用的是哪种技术堆栈,但在 Java webapp 中,您可以在标签内的 web.xml 中进行配置。

        <error-page>
          <error-code>401</error-code>
          <location>{path to custom page}</location>
        </error-page>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-13
          • 2018-06-15
          • 2019-08-14
          • 1970-01-01
          相关资源
          最近更新 更多