2

我为 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 而不是总是仪表板。

他们两个似乎有点工作?有人有更好的主意吗?

4

1 回答 1

1

大多数需要登录的网站似乎都使用方法 A。例如,在 Stack Overflow 上,如果您访问需要登录的页面,您会被重定向到/users/login?returnurl=...,这会导致returnurl在登录表单中将字段作为隐藏字段发出。

于 2009-01-22T19:08:51.793 回答