【发布时间】:2017-11-22 12:23:03
【问题描述】:
我创建了一个网络应用程序。一切正常。但是,如果用户没有登录,他们仍然可以通过 url 访问其他 jsp 页面。我想停止 url 访问。我看到了一些示例,它显示了过滤器的用法。我是过滤器的新手,我不知道如何实现它。我正在使用 servlet、dao 和 jsp 页面。
请建议我怎么做。我想为所有 jsp 或 servlet 页面制作一个过滤器。
Web.XML:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>MBO</display-name>
<filter>
<filter-name>MyFiltersDAO</filter-name>
<filter-class>Model.MyFiltersDAO</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFiltersDAO</filter-name>
<url-pattern>/secret/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
</web-app>
类:
public class MyFiltersDAO {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String abc=(String) req.getSession().getAttribute("Username");
if(null==((String) req.getSession().getAttribute("Username")) || ((String) req.getSession().getAttribute("Username")).equals("")){
chain.doFilter(req, resp);
} else {
resp.sendRedirect("/Login.jsp");
}
}
public void destroy() {
}
}
当我运行项目时它显示 HTTP404 错误
【问题讨论】:
-
您尝试过使用会话吗?
-
此链接可以为您完整使用:javatpoint.com/authentication-filter
-
你可能会看看 Spring Security,即使你没有使用 Spring(当有用的框架可用时,你真的不应该手动编码 servlet)。
-
把jsp文件放到web-inf文件夹中,这样用户就不能直接访问了。并使用 HttpSession 存储登录用户
-
我遇到了同样的问题。我在“禁用 jsp 页面的直接访问 - JavaServer Pages (JSP) 和 JSTL”下使用了此链接中的代码:java.databasedevelop.com/article/11412792/…(请参阅添加到 web.xml 文件中的代码)。这对我来说非常有效。只有当一个人点击一个链接时,用户才能访问该页面,但是如果用户将.jsp页面放在url中,用户将无法访问,并且会抛出“HTTP Status 403 – Forbidden”错误,这就是我想要的。