处理 org.jasig.cas.client.validation.TicketValidationException

Handling org.jasig.cas.client.validation.TicketValidationException

我们的 spring 引导 Web 应用程序使用 CAS 身份验证。我们正在进行安全扫描,其中一个测试用例使用无效的 CAS 票证登录。测试用例是:“/Logon?blockbanner=true&ticket=ST-3582-f3sADdmKlq”

由于此票证无效,CAS 发出了警告(见下文),结果是安全团队未能通过的 Http 500。

我试图在我们的 spring 安全配置中捕获此字符串:

 .regexMatchers(".+blockbanner=true.+").denyAll()

但是,如果我们正常登录并返回有效票证,我们将无法进入应用程序!

有没有办法捕获和处理来自CAS的警告,以便我们可以产生更好的Http错误,例如Http 401等?谢谢!

CAS 警告

020-04-17 11:22:26,913 WARN  o.j.c.c.v.Saml11TicketValidationFilter[AbstractTicketValidationFilter.java:189] doFilter: org.jasig.cas.client.validation.TicketValidationException: org.opensaml.SAMLException: ticket 'ST-155-g1lYXqTfB0xAOAp2RrU7-tecs_cas_sat' not recognized
org.jasig.cas.client.validation.TicketValidationException: org.opensaml.SAMLException: ticket 'ST-155-g1lYXqTfB0xAOAp2RrU7-tecs_cas_sat' not recognized
        at org.jasig.cas.client.validation.Saml11TicketValidator.parseResponseFromServer(Saml11TicketValidator.java:115)
        at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:217)
        at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)

所以,我找到了解决这个问题的方法。我添加了行:

filter.setExceptionOnValidationFailure(假);

以便 CAS 在获得无效票证时不会生成警告。 因此,它返回的不是 Http 500,而是通过安全扫描测试的 Http 403。

Saml11TicketValidationFilter filter = new Saml11TicketValidationFilter();
             beanFactory.autowireBean(filter);

             filter.setIgnoreInitConfiguration(true);
             filter.setRedirectAfterValidation(true);
             filter.setArtifactParameterName("ticket");
             filter.setServerName(serverName);
             filter.setExceptionOnValidationFailure(false);