Spring mvc 如何在SpringMVCwebApplication上对每个.jsp页面执行许可证检查?

Spring mvc 如何在SpringMVCwebApplication上对每个.jsp页面执行许可证检查?,spring-mvc,spring-security,Spring Mvc,Spring Security,我们正在用SpringMVC和基于rest的组件开发一个web应用程序。我们已经使用spring安全性实现了身份验证。现在,此产品应使用有效的许可证运行。此实现已完成,在webapp启动之前,我们将进行此检查,以查看产品是否获得许可。如果没有,用户可以上传许可文件,并开始使用该产品 一旦他们开始使用该产品,比如说几天后许可证可能过期(当然,启动服务器会发现这一点,但如果没有服务器重新启动,那么他们可以在过期后愉快地使用)。因此,我希望对每个请求进行检查,检查产品是否获得许可(就像isAuthen

我们正在用SpringMVC和基于rest的组件开发一个web应用程序。我们已经使用spring安全性实现了身份验证。现在,此产品应使用有效的许可证运行。此实现已完成,在webapp启动之前,我们将进行此检查,以查看产品是否获得许可。如果没有,用户可以上传许可文件,并开始使用该产品

一旦他们开始使用该产品,比如说几天后许可证可能过期(当然,启动服务器会发现这一点,但如果没有服务器重新启动,那么他们可以在过期后愉快地使用)。因此,我希望对每个请求进行检查,检查产品是否获得许可(就像isAuthenticated()一样)。如果未经验证,我可以重定向到许可证上载页面

如有任何想法/建议,我们将不胜感激

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <beans:bean id="mySuccessHandler" class="com.cavirin.security.MySavedRequestAwareAuthenticationSuccessHandler" />
    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="localAuthenticationProvider" />
    </authentication-manager>

    <http auto-config="true" use-expressions="true">
        <request-cache ref="authenticationRequestCache" />
        <form-login login-page="/"      
            authentication-success-handler-ref="successHandler"
            authentication-failure-url="/rest/login/reAuthenticate" />
        <intercept-url pattern="/rest/**" access="isAuthenticated()" />
    </http>

    <beans:bean id="successHandler"
        class="com.cavirin.security.MySavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/rest/login/checkUser" />
    </beans:bean>

springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

要检查每个请求,您可以在应用程序中添加一个过滤器。但是,对于那些正在做一些事情的用户来说,当他们被重定向到许可证页面时,这将是非常恼人的。它似乎也相当低效。作为替代方案,您可以添加一个
身份验证提供程序
,它只会在有人登录时进行检查,否则会拒绝身份验证。

在身份验证之前,我们会检查有效许可。对正如您所提到的,这可能是低效的,但我想添加这一点,以避免在登录后许可证到期后过度使用产品。您能告诉我如何添加另一个过滤器吗。由于我已经使用了“DelegatingFilterProxy”,所以用很少的代码片段编辑了我的问题。我添加了一个过滤器(公共类LicenseCheckFilter实现了过滤器{…},但如何抛出自定义异常,例如LicenseExpiredException?如果确实需要委托给SpringBean,则可以使用多个
DelegatingFilterProxy
实例。或者,您可以将其作为标准筛选器添加到
web.xml
中。我不明白为什么需要异常-只需从筛选器重定向即可。我需要红色直接转到许可证上载页面,并显示一条消息“许可证已过期”(-LicenseExpiredException),因此只需使用要转到的URL调用redirect即可。这样做不需要抛出实际的Java异常。