我为 Intranet Web 应用程序使用应用程序管理的安全性。
我的 web.xml 文件中有下一个过滤器:
<filter>
<filter-name>employeeAccessFilter</filter-name>
<filter-class>security.AuthorizationFilter</filter-class>
<init-param>
<param-name>roles</param-name>
<param-value>employee</param-value>
</init-param>
<init-param>
<param-name>onError</param-name>
<param-value>../index.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>employeeAccessFilter</filter-name>
<url-pattern>/corporate/*</url-pattern>
</filter-mapping>
index.html包含一个登录框。当用户登录时,他们会转到 Intranet 的仪表板。过滤器效果很好。
看下一种情况:
- 有人收到一封带有内网页面的电子邮件,例如:http ://appname.com/corporate/page.do?id=6
- 他单击链接,他的默认浏览器存储了一个 cookie,他会自动登录,并且页面可以正常显示。
但:
- 有人收到一封带有 Intranet 页面链接的电子邮件,例如:http ://appname.com/corporate/page.do?id=6
- 他单击该链接,他的默认浏览器没有应用程序 cookie,因此不会自动登录。他被重定向到登录屏幕。他登录但他转到仪表板而不是链接中提到的页面。
有没有简单的方法来解决这个问题?
我基本上有两个想法:
B) - 使用 Basic - 容器管理的安全性,这将解决问题。
A) - 在身份验证过滤器中实现一种机制,将被拒绝的 url 存储为请求属性。- 将被拒绝的 url 作为登录框的隐藏字段。- 更改登录逻辑以使用字段 url 而不是总是仪表板。
他们两个似乎有点工作?有人有更好的主意吗?