web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Book</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>loginStatusFilter</filter-name>
<filter-class>zz.homework.servlet.LoginStatusFilter</filter-class>
<init-param>
<param-name>unCheckUris</param-name>
<param-value>/verifyCode,/login.jsp,/logServlet,/register.jsp,/regServlet,/logout,/regResult.jsp</param-value>
</init-param>
<init-param>
<param-name>keyOfUserInSession</param-name>
<param-value>user</param-value>
</init-param>
<init-param>
<param-name>backUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginStatusFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
过滤器servlet
package zz.homework.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginStatusFilter implements Filter {
//不需要检查的uri集合
private List<String> unCheckList = new ArrayList<String>();
//登录成功时在Session中保存的用户信息的键
private String keyOfUserInSession;
//检查到未登录时调回登录界面的路径
private String backUrl;
@Override
public void init(FilterConfig cfg) throws ServletException {
String unCheckUris = cfg.getInitParameter("unCheckUris");
String[] split = unCheckUris.split(",");//字符串分割
for (String str : split) {
unCheckList.add(str.trim());
}
keyOfUserInSession = cfg.getInitParameter("keyOfUserInSession");
backUrl = cfg.getInitParameter("backUrl");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//从Session中获取user
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//获取请求的uri
String uri = req.getRequestURI();
uri = uri.replace(req.getContextPath(), "");
//不检查的请求uri直接通过
if(unCheckList.contains(uri)){
chain.doFilter(request, response);
}else{
Object obj = req.getSession().getAttribute(keyOfUserInSession);
//判断是否已经登录
if(null == obj){
req.setAttribute("errorMsg", "请先登录!");
req.getRequestDispatcher(backUrl).forward(req, resp);
}else{
//已经登录 就直接放行
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/75237.html