web开发之登录拦截器
我们在进行web开发的时候,通常会限制用户的合法性,即登陆拦截和验证,只是为了保障系统的安全,只将我们规定的个别请求可直接访问,其余的必须经过拦截器来进行验证,那么拦截器到底该怎么写呢?下面就将Spring MVC和JFinal中的登录拦截器的写法记录一下,我们一起进步
Spring MVC中的登录拦截
1.编写登录拦截类
/**
* @ClassName: LoginFilter
* @author Liu_xg
* @date 2018年5月3日
* @Description: TODO 登陆拦截及验证
*/
public class LoginFilter implements Filter {
private String[] paths;
@Override
public void destroy() {}@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//设置字符集为utf-8
request.setCharacterEncoding("UTF-8");
String path=request.getServletPath();
for (String p : paths) {
if (path.equals(p)) {
chain.doFilter(request, response);
return;
}
}
HttpSession session=request.getSession();
try {
String username=(String) session.getAttribute("username");
if(username==null){
//判断session是否为空,为空的话就页面重定向到登陆界面
response.sendRedirect(request.getContextPath()+"/text/index");
return;
}
} catch (Exception e) {
// TODO Auto-generated catch block
//判断session是否为空,为空的话就页面重定向到登陆界面
response.sendRedirect(request.getContextPath()+"/text/index");
e.printStackTrace();
return;
}
chain.doFilter(request, response);
}@Override
public void init(FilterConfig config) throws ServletException {
// 将配置的放行url取出来
paths = config.getInitParameter("excPath").split(",");
}}
2.在web.xml中配置不需要拦截的请求
filter
com.ftwj.interceptor.LoginFilter
excPath/text/index,/text/login,/text/register,/check/loginname,
/check/password,/check/pswContain,/user/register
filter
/*
其中标签中就是不需要拦截的请求
JFinal中的登录拦截
1.编写登录拦截类
/**
* @ClassName: LoginInterceptor
* @author Liu_xg
* @date 2018年5月10日
* @Description: TODO登陆拦截器
*/
public class LoginInterceptor implements Interceptor {@Override
public void intercept(Invocation inv) {
try {
//取到session
HttpSession session=inv.getController().getSession();
if(session==null){
inv.getController().redirect("/toLogin");
}else{
if(session.getAttribute("user")!=null){
User user=(User) session.getAttribute("user");
if(user!=null){
inv.invoke();
}else{
inv.getController().redirect("/toLogin");
}
}else{
inv.getController().redirect("/toLogin");
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
inv.getController().redirect("/toLogin");
}
}
}
2.将拦截器注册到框架中
/**
* 配置路由
*
* @param me
*/
@Override
public void configRoute(Routes me) {// 配置拦截器
me.addInterceptor(new LoginInterceptor());
me.add("/", LoginController.class, "/WEB-INF/views/login");
me.add("/main", MainController.class, "/WEB-INF/views/main");
me.add("/menu", MenuController.class, "/WEB-INF/views/menu");
me.add("/user", UserController.class, "/WEB-INF/views/user");
me.add("/role", RoleController.class, "/WEB-INF/views/role");
}
3.设置不需要拦截的请求
1).这种方式是将整个controller都不拦截
/**
* @ClassName: LoginController
* @author Liu_xg
* @date 2018年5月4日
* @Description: TODO 登陆控制器
*/@Clear(LoginInterceptor.class)
public class LoginController extends Controller {
******
}
【web开发之登录拦截器】2).这种方式是不拦截此方法
/**
* 登陆,判断账号和密码是否正确
*/
@Clear(LoginInterceptor.class)
public void login() {
*********
}
推荐阅读
- 开学第一天(下)
- 20170612时间和注意力开销记录
- 深入理解Go之generate
- 开花店的前景怎么样()
- 眉头开了
- 上班后阅读开始变成一件奢侈的事
- 小影写在2018九月开学季
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- 流转