【发布时间】:2023-03-16 03:56:01
【问题描述】:
我有一个 Web 应用程序 (JSP),我需要限制访问,因此只有登录的用户才能看到该应用程序。我看了看,发现了许多不同的方法。有人说要使用 cookie、会话或框架,例如 Spring Security。
我应该使用什么?到目前为止,我在 java 和 jsp 编程方面有中等经验,那么您建议我做什么?
非常感谢!
【问题讨论】:
标签: spring security jsp spring-security
我有一个 Web 应用程序 (JSP),我需要限制访问,因此只有登录的用户才能看到该应用程序。我看了看,发现了许多不同的方法。有人说要使用 cookie、会话或框架,例如 Spring Security。
我应该使用什么?到目前为止,我在 java 和 jsp 编程方面有中等经验,那么您建议我做什么?
非常感谢!
【问题讨论】:
标签: spring security jsp spring-security
我建议直接使用它,而不是准备自制版本的 Spring Security。考虑以下优点:
检查Apache Shiro 和Spring Security 可能对您有用。
对于 Spring Security,如果您从 here 开始阅读官方文档,那么您可以在不到 30 分钟的时间内为基本 URL 授权(在 conf 中使用硬编码用户)准备所有 conf。然后,您需要在类路径中包含相应的 jar(用于 Spring 和 Spring Security),仅此而已。打开org.springframework.security 的调试日志以查看发生了什么。
【讨论】:
考虑使用 servlet 过滤器。将登录用户存储在会话中,并配置过滤器以检查用户在尝试访问您网站的安全目录时是否已登录(通过 url-pattern)。
这里是http://www.tutorialspoint.com/jsp/jsp_writing_filters.htm的基本信息。
但这里有一些更具体的内容可以帮助您入门。
创建一个实现 javax.servlet.Filter 的类,覆盖 doFilter 方法并检查用户是否已登录并使用注释配置 urlPatterns。
过滤器上的注释是这样的:
@WebFilter(filterName="LoggingFilter", urlPatterns={"/secured/*"})
您希望保护的目录称为“安全”。
在类中重写doFilter()方法并检查用户是否登录:
User user = session.getAttribute("user");
if (user != null) {
chain.doFilter(request, response); // User is logged in so forward response.
} else {
response.sendRedirect("login"); // User not logged in so redirect to login page.
}
这是将登录用户限制在网站指定部分的有效方法。这个简单的示例可以扩展为根据用户类型或其他标准限制对网站不同部分的访问。
【讨论】: