运行应用程序时,过滤器始终始终处于运行状态,如何验证登录名并仅在提交后调用过滤器,以及如何准确地检查过滤器中的数据?
我的过滤器
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?
答案 0 :(得分:0)
首先,您需要知道有一些库可以帮助您避免使用该样板代码,但是在某些情况下,您必须自己编写它。 过滤器是在您请求URL时执行的代码,并且具有一些可供选择的规则,并将您重定向到资源。您可以定义允许访问资源的任何规则。通常,您应该做的是找到一个用户ID(通常从cookie中查找)并查找其角色,每个角色都有其可以访问的资源。通常,它应该存储在数据库中。例如,如果定义的用户具有角色:ROLE_ADMIN,并且ROLE_ADMIN有权访问主页,则用户应访问该主页。如果该用户没有角色(或者,如果您不想,则不是活动用户),则过滤器可以重定向到您定义的未授权页面。请记住,您可以使用会话来存储用户访问权限,而不必在每次用户请求资源时都调用存储库服务。这是有关如何操作的一般思路,如果您需要任何详细信息,可以查看以下链接:
https://www.baeldung.com/intercepting-filter-pattern-in-java
https://examples.javacodegeeks.com/enterprise-java/servlet/java-servlet-filter-example/