如果只是实现这个功能的话,其实很简单,写一个filter专用类,在web.xml中配置Filter,过滤地址实现页面拦截
下面基础代码奉上
filter类
package com.tjzs.sccms.filter;
/**
* 配置url地址过滤
* @author Administrator
*拦截器的作用
*登陆前限制访问,只有登录之后才可以访问
*/
import java.io.IOException;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.tjzs.sccms.po.TUser;
public class UrlFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO 对全栈url进行过滤
//将request和response对象强转为http类型
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//获取访问的地址
String url = req.getRequestURI();
System.out.println(url);
//获取session中的对象判断是否登录
//拦截所有的 .do 请求但不包含tologin.do
//jsp文件已经放到web-inf下 不用过滤 只过滤 .do请求即可
if(url.contains(".do")&&!url.contains("tologin.do")&&!url.contains("login.do")) {
//获取session
HttpSession session = req.getSession();
TUser user=(TUser) session.getAttribute("USER");
if(user==null){
resp.sendRedirect("/dscms/tologin.do");
return;
}
}
//继续执行过滤连的剩余部分
chain.doFilter(req, resp);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
写好类之后在web.xml配置文件中直接加入filter的配置
<!-- 配置url拦截器 -->
<filter>
<filter-name>UrlFilter</filter-name>
<filter-class>com.tjzs.sccms.filter.UrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
下面是验证登录部分的代码
// 去到login.jsp
@RequestMapping("/tologin.do")
public String tologin() {
// 到login页面
return "login";
}
// 登录
@RequestMapping("/login.do")
public String login(String loginname, String password, HttpSession session, ModelMap map) {
TUser user = null;
// 登录成功到main.jsp页面
try {
user = us.chkLogin(loginname, password);
// 将用户信息放到session中
session.setAttribute("USER", user);
return "main";
} // 登录失败
catch (SysException e) {
// TODO Auto-generated catch block
map.addAttribute("MSG", e.getErrMsg());
return "login";
} catch (Exception e1) {
e1.printStackTrace();
return "error";
}
}
之前在网上看到有的网友说
在配置web.xml中的filter的时候
要遵循 listener-filter-servlet的顺序
说明一下
其实没有必要,因为这是文件加载程序的执行顺序
如果配置中包含 <context-param> 标签
那么他则是最先执行的
也就是
<context-param> -<listener>-<filter>-<servlet>
这是初始化顺序
当然,如果为了代码严谨性和美观性
自行搭配
注:这是基础的拦截实现,初步实现之后门后面还要对登录的用户做权限处理,而且登录之后,用户即可访问全部页面,权限问题后续更新…..