【问题标题】:How to prevent direct access to pages from url for jsp pages [duplicate]如何防止从jsp页面的url直接访问页面[重复]
【发布时间】: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”错误,这就是我想要的。

标签: java jsp servlets


【解决方案1】:

你可以尝试一下会话。假设当用户登录时,你可以在会话中设置会话属性,如

   if(loggedIn)
{
session.setAttribute("username",username);
}

并且在您的 jsp 中,您可以验证页面何时加载,如果会话不为空,则应该访问该页面,否则将用户重定向到主页

if(session.getAttribute("username")!=null)
{


}
else
{
response.sendredirect(url)
}

更新: 您可以使用

       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                HttpSession session = request.getSession(); 
  if(loggedIn)
    {
    session.setAttribute("username",user))
response.sendredirect("index.jsp");
    }
}

在你的 index.jsp 中

<%

if (session.getAttribute("username") !=null) {
//your code
}
else
{
//your code
}
%>

【讨论】:

  • 嗨,我怎样才能从 servlet 调用这个类
  • 在你的 servlet 中,httpresponse 对象已经默认在 get 和 post 方法中创建,你只需要像 Httpsession session=response.getSession(); 这样创建一个会话对象;然后将 session 设置为 session.setAttribute(arg1,arg2),在你的 jsp 中你可以直接在一个 scriplet 中使用 session.getAttribute(arg1)
  • 嗨,@Vikram Saini,你能提供我的代码吗?我是这个 Java 的新手,请帮帮我
  • 我已经更新了答案
  • 我没有登录页面没有访问它重定向到登录页面但是当我使用用户名和密码登录时它无法打开下一页我在哪里做错了请告诉我
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 2010-11-05
  • 2010-09-16
  • 1970-01-01
  • 2023-03-05
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多