Pra*_*tel 9 java licensing web.xml servlets filter
我想保护我的webapp许可证.当请求webapp的任何页面/资源时,我想首先检查许可证.如果未找到许可证,那么我想重定向到许可证上载页面.
我创建了一个过滤器,它映射到我可以检查许可证的所有请求,并在必要时重定向.问题是我的webapp具有登录验证的安全约束.有关详细信息,请参阅最后的web.xml.
由于安全性约束,所有请求首先被登录身份验证拦截,然后转发到我的过滤器.但是,我想在登录之前检查许可证.
这是我问过的一个相关问题.
优先考虑安全约束的过滤器似乎是不可能的.所以,我想问一下,有什么其他方法可以解决这个用例吗?
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Tango</display-name>
<filter>
<filter-name>SalsaValidationFilter</filter-name>
<filter-class>net.semandex.salsa.validationFilters.SalsaValidationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SalsaValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
<!-- <servlet-name>SalsaValidationServlet</servlet-name> -->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Login page images</web-resource-name>
<url-pattern>/images/salsadb-logo2.png</url-pattern>
<url-pattern>/images/salsa-icon.png</url-pattern>
<url-pattern>/images/shadow_box.png</url-pattern>
<url-pattern>/images/header.png</url-pattern>
<url-pattern>/images/bg.png</url-pattern>
<url-pattern>/css/splash.css</url-pattern>
<url-pattern>/WEB-INF/licenseValidation.html</url-pattern>
<url-pattern>/auth/licenseValidation.html</url-pattern>
</web-resource-collection>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>The entire webapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>SalsaUser</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>SalsaUser</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/auth/login.jsp</form-login-page>
<form-error-page>/auth/loginError.jsp</form-error-page>
</form-login-config>
<realm-name>mongo_login</realm-name>
</login-config>
</web-app>
Run Code Online (Sandbox Code Playgroud)
小智 1
如果您必须在身份验证之前验证许可证,唯一的方法是使用编程安全性并将许可证验证作为过程的一部分。
当声明性安全性不足以表达应用程序的安全模型时,编程安全性非常有用。用于编程安全性的 API 由 EJBContext 接口和 HttpServletRequest 接口的方法组成。这些方法允许组件根据调用者或远程用户的安全角色做出业务逻辑决策。
https://docs.oracle.com/javaee/7/tutorial/security-intro003.htm#BNBXH
以下是一些简短的示例:https ://docs.oracle.com/javaee/7/tutorial/security-webtier003.htm#GJIIE
我自己没有做过程序安全性,但从外观上看,你可以这样做:
确保重定向到不同的路径,以便这些页面不会再次调用过滤器并循环。(过滤器可以配置为在转发/重定向时跳过,我认为这是默认设置,但如果您必须放弃安全约束,那么您需要确保无论如何都会调用它们。)
您可以在单个过滤器中完成所有这些操作和/或在无法写出适当的响应时进行重定向(有点模拟 servlet 多次向自己 POSTing)。过滤器比 servlet 更适合此目的,因为您可以确定任何访问尝试都会调用它。
另一种方法是将 2) 和 3) 中的所有内容编写为除“真实”应用程序之外的单个 servlet,并在会话未经身份验证且没有正确的“有效许可证”时使用过滤器重定向到它。属性集(您在 servlet 中设置)。这可能会更快并且更容易维护,但耦合不会那么紧密。
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |