gpt4 book ai didi

java - 到底如何使用 Filter 来验证登录

转载 作者:行者123 更新时间:2023-12-02 06:11:22 25 4
gpt4 key购买 nike

当我运行我的应用程序时,我的过滤器始终首先运行,如何验证登录并仅在提交后调用我的过滤器,以及如何检查过滤器中的数据?

我的过滤器

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {

System.out.println("I'm in the filter");
HttpServletRequest request2 = (HttpServletRequest) request;
HttpSession session = request2.getSession();
Object obj = (Object) session.getAttribute("user");

if(obj==null) {
request.getRequestDispatcher("ErrorPage.html").forward(request,response);
} else {
chain.doFilter(request,response);
}}

我的帖子表格

<form action="LoginServlet" method="POST">
<div class="imgcontainer">
<img src="img_avatar2.png" alt="Avatar" class="avatar">
</div>

<% System.out.println("Entrei no Login"); %>

<div class="container">
<%--@declare id="uname"--%><%--@declare id="psw"--%><label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="uname" required>

<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="psw" required>

<button type="submit">Login</button>

</div>

<div class="container" style="background-color:#f1f1f1">
<button type="button" class="cancelbtn">Cancel</button>

</div>

我的问题是,如何使用过滤器来验证登录?我的意思是,我觉得只使用 Servlet 并比较用户名和密码要容易得多,我不明白过滤器中如何处理提交表单。

我应该/可以将提交表单直接发送到过滤器吗?或者我确实需要在此通信过程中使用 servlet?

最佳答案

首先,您需要知道有一些库可以帮助您避免这种样板代码,但在某些情况下您必须自己编写它。过滤器是每当您请求 URL 时就会执行的代码,并且具有一些您可以选择的规则,并将您重定向到资源。您可以定义允许访问资源所需的任何规则。通常你应该做的是找到一个用户ID(通常来自cookie)并查找他的角色,每个角色都有他可以访问的资源。通常它应该存储在数据库中。例如,如果定义的用户具有角色: ROLE_ADMIN ,并且 ROLE_ADMIN 有权访问主页,则用户应该访问该主页。如果该用户没有角色(或者不是 Activity 用户,如果您愿意的话),过滤器可以重定向到您定义的未经授权的页面。请记住,您可以使用 session 来存储用户访问权限,而不必在每次用户请求资源时调用存储库服务。这是关于如何做到这一点的一般想法,如果您需要任何详细信息,可以查看此链接:

https://www.baeldung.com/intercepting-filter-pattern-in-java

https://examples.javacodegeeks.com/enterprise-java/servlet/java-servlet-filter-example/

https://www.oracle.com/technetwork/java/filters-137243.html

关于java - 到底如何使用 Filter 来验证登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55903779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com