版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
实现账号密码登录的过滤器,正确登录成功,否则重新登录。
代码结构如下图
web.xml配置文件内容为
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>CheckLoginFilter</filter-name>
<filter-class>com.aaa.mvc.filter.CheckLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 解决post乱码 -->
<filter>
<filter-name>CharSetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharSetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载自定义文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
写一个简单的登录jsp页面
<body>
<center>
<div style="color:red">${info}</div>
<form action="stuController/user" method="post">
账号:<input type="text" placeholder="请输入账号" name="username">
密码:<input type="password" placeholder="请输入密码" name="password">
<input type="submit" value="登录">
</form>
</center>
</body>
在controller层的方法
@RequestMapping("/user")
public String userLogin(String username,String password,HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException{
if("admin".equals(username)&&"123".equals(password)){
session.setAttribute("username", username);
return "redirect:list";
}
request.setAttribute("info", "账号或密码错误");
return "login";
}
新建一个filter过滤器类,右键点击filter包,新建一个类,名为LoginFilter
filter类为过滤器,内容为
public class CheckLoginFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
Object user=request.getSession().getAttribute("username");
System.out.println("进入过滤器----------------");
//都是获取请求地址
String requestURI=request.getRequestURI();//只获取项目名称之后的
StringBuffer requestURL=request.getRequestURL();//获取的完整的定位路径
//因为过滤器拦截了所有请求,我们把请求地址中含有jsp和userLogin的放弃拦截
if(requestURI.equals("jsp")||requestURI.equals("user")||user!=null){
arg2.doFilter(arg0, arg1);
}else{
response.sendRedirect(request.getContextPath()+"/user/login.jsp");
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
以上为配置filter过滤器的过程。