处理 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);
我们的 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);