覆盖JSP servlet(filter“* .jsp”)以包装在身份validation模型中

可以以某种方式扩展在* .jsp上过滤的JSP servlet(在Tomcat 6中的org.apache.jasper.servlet.JspServlet),因此每当有人进入JSP页面时我都可以进行一些服务器端身份validation来检查用户是否可以查看页面。 我们当前的技术是一个常见包含中的taglib,它被导入到每个JSP页面中,但它不是很优雅。

这里的关键是我不想重新发明轮子并担心将JSP编译成Servlet,理想情况下我希望用super.meth()委托每个方法。

我一直在搜索Google,但我不知道使用正确的关键字。 任何包含JSP和Servlet的内容都会返回初学者教程。

谢谢,

约翰

查看Servletfilter ,并在转发到某个JSP或Servlet之前使用该filter。

如果没有利用Java EE提供的容器管理安全性,那么通常的基本做法是将登录的User存储在会话范围中,并在所需的url-pattern上使用Filter来检查User是否已登录。

这是获得图片的基本示例:

登录:

 User user = userDAO.find(username, password); if (user != null) { session.setAttribute("user", user); } else { // Do your thing to show "Unknown login" error. } 

filter(映射到例如/secured/*/protected/*等的url模式,其中放置登录页面的受限JSP页面):

 User user = session.getAttribute("user"); if (user != null) { chain.doFilter(request, response); // Logged in, so continue with request. } else { response.sendRedirect("login"); // Not logged in, redirect to login page. } 

登出:

 session.removeAttribute("user"); // Or, a bit too drastically: session.invalidate(); 

当然,您也可以利用Java EE开箱即用的安全性。 常用的方法是声明性容器管理安全性,您可以在其中指定用户和角色。 您只需要在web.xml声明 ,并在appserver中配置用户域。 细节取决于所使用的appserver,但如果它是例如Tomcat 6.0,那么你可以在这里找到一些关于它的文档。

如果基本身份validation不够,可能Spring Security会更好。 这很自然,特别是如果你已经使用Spring了。 一个很大的优点是它是声明性的,因此只需将URL添加到安全配置中即可轻松保护URL。

通过inheritance执行此操作会很脆弱,并且每次修改安全性时都需要更改代码。 最好将安全作为一个贯穿各领域的关注点。

你能不能创建另一个filter并将其放在JspServlet上面? 如果出现问题,此filter将检查您的安全性并进行一些处理(例如重定向到登录页面)。