当前位置: 代码迷 >> Java Web开发 >> Filter:使用Filter、Session判断登录,请先辈看下有没有什么可以改进的地方,100分奉上
  详细解决方案

Filter:使用Filter、Session判断登录,请先辈看下有没有什么可以改进的地方,100分奉上

热度:6685   发布时间:2016-04-10 22:45:30.0
Filter:使用Filter、Session判断登录,请前辈看下有没有什么可以改进的地方,100分奉上
登录页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
  </head>
  <body>
    <form action="servlet/LoginServlet" method="post">
    <input type="text" name="username"/><br/>
    <input type="password" name="password"/><br/>
    <input type="submit" value="登录"/>
    </form>
  </body>
</html>

登录成功页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>登录成功!
</body>
</html>

web.xml

<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>

LoginServlet

public class LoginServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletExceptionIOException {
doPost(request, response);
}

public String notNull(String param) {
return param == null ? "" : param;
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");

System.out.println("username:"+username);
System.out.println("password:"+password);

if (username.equals("douya0808") && password.equals("123456")) {// 直接给xxxxLoginTest/servlet/LoginServlet会由于没传值而报出NullPointer
System.out.println("信息正确,跳转页面中...");
session.setAttribute("login", "LoginSuccess!");
response.sendRedirect(request.getContextPath() + "/success.jsp");
} else {
response.sendRedirect(request.getContextPath() + "/login.jsp");
}

}
}

LoginFilter

public class LoginFilter implements Filter {

public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化中...");
}

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;

HttpSession session = httpServletRequest.getSession();
System.out.println("开始过滤....");

if (httpServletRequest.getServletPath().indexOf("login.jsp") > 0 || httpServletRequest.getServletPath().indexOf("servlet/LoginServlet") > 0) {
System.out.println("放过该请求...");
chain.doFilter(request, response);
} else {

String user = (String) session.getAttribute("login");
if (user != null) {
System.out.println("已登录,取消过滤...");
chain.doFilter(request, response);

} else {
System.out.println("未登录,跳转到登录页面...");
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
}
}
System.out.println("完成过滤....");
}
}


请前辈们帮我看下我这里有什么需要改进的地方吗?以为小弟刚学就是凭着记忆写的,而且我看网上的很多例子都是只放开login.jsp,但是我这里需要放开login.jsp还需要放开表单的请求路径servlet/LoginServlet,不然就会一直卡在login.jsp,是不是我写的哪里有问题呢?300分奉上!
------解决方案--------------------
你肯定要放开login.jsp页面和它请求的servlet,如果有注销页面的话,还要把注销页面和相应的注销的servlet一并放过,如果你只放过了login.jsp,你点击登陆后就会请求相应的servlet.,由于每一个请求都会经过过滤器过滤,当你请求servlet的时候,不满足你过滤器中的条件,直接就跳转到login.jsp,希望能帮到你
------解决方案--------------------
引用:
你肯定要放开login.jsp页面和它请求的servlet,如果有注销页面的话,还要把注销页面和相应的注销的servlet一并放过,如果你只放过了login.jsp,你点击登陆后就会请求相应的servlet.,由于每一个请求都会经过过滤器过滤,当你请求servlet的时候,不满足你过滤器中的条件,直接就跳转到login.jsp,希望能帮到你

正解,不累赘陈述了
------解决方案--------------------
引用:
登录页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  相关解决方案