覆盖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将检查您的安全性并进行一些处理(例如重定向到登录页面)。