shiro对接CAS后,post如何认证

在OA项目对接CAS服务后,每次请求都要去CAS做认证,但是前端的ajax请求,无法重定向到CAS去做认证,目前的解决方法是:

重写 CasFilter.isAccessAllowed(ServletRequest, ServletResponse, Object), 因为它的方法要求每次请求永远都要走认证流程, 这里我们使用父类(AuthenticatingFilter)的流程,父类的流程是拿到我们之前获得的 subject 来做后续流程.

依赖版本


        <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-cas</artifactId>
            <version>1.4.1</version>
        </dependency>

CASFilter


public class CasFilter extends AuthenticatingFilter {

...
   
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        // 不直接返回false
        // return false;
        
        /**
        *
        * 重写了 {@link CasFilter#isAccessAllowed(ServletRequest, ServletResponse, Object)},
        *
        * 因为它的方法要求每次请求永远都要走认证流程,
        *
        * 这里我们使用父类(AuthenticatingFilter)的流程,父类的流程是拿到我们之前获得的 subject 来做后续流程.
        *
        * @see CasFilter#isAccessAllowed(ServletRequest, ServletResponse, Object)
        * @see AuthenticatingFilter#isAccessAllowed(ServletRequest, ServletResponse, Object)
        */
        return super.isAccessAllowed(request, response, mappedValue);
    }

...
}

另外,shiro 推荐使用 buji-pac4j 来代替 shiro-cas , pac4j 支持各种主流认证协议;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注