如何实现

如何实现

l  使用过滤器限制不登录不能进入管理页面

        l  使用监听器进行数据初始化,在xml中存储用户信息,编写XmlDataSource类将数据从xml中读取出来,然后将List存放到ServletContext中,登录时判断用户名和密码在List的用户信息中是否存在,如果存在就登录成功,否则登录失败



这简单的逻辑写好也不太容易,,,,整个项目都在多次注重初始化,

怎么更好地把握全局脉络?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2021-04-20 16:37:44

同学你好,

1、这里需要创建两个过滤器

http://img1.sycdn.imooc.com//climg/6013a563097c0ddb03600074.jpg

   1)用户登陆过滤器,建议过滤全部地址,然后放行css、js、login等文件,然后在AuthFilter过滤器中,通过(User) req.getSession().getAttribute("")是获取session值,最后判断session值是否为空,如果为空(null),则代表未登陆成功,则会进行拦截并跳转到login.jsp文件中。参考代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 判断是否能通过
boolean flag = false;
String reqURI = req.getRequestURI();
// 不需要过滤的url
String[] url = { ".js", ".css", ".html", ".png", "login" };
for (String str : url) {
// 判断uri是否需要过滤
if (reqURI.indexOf(str) != -1) {
flag = true;
break;
}
}
// 如果为flag为false,则判断是否登录,如果登录,则放行,没登录则跳转到登录页面
if (!flag) {
User user = (User) req.getSession().getAttribute("user");
if (user != null) {
// 如果user为null,则直接调用getUserName()方法,会出现空指针异常,所以建议在if判断中进行输出
System.out.println("====== authfilter过滤user结果username=" + user.getUserName());
chain.doFilter(request, response);
return;
} else {
res.sendRedirect(request.getServletContext() + "/login.jsp");
}
}
chain.doFilter(request, response);
}

​2)中文乱码过滤器,可以通过response.setContentType()设置响应的内容类型及编码。参考代码如下:    

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}

2、 监听器中,从xml中读取到用户信息存入List集合中,并将list集合放入ServletContext中。在controller中,从ServletContext中获取到存放用户信息的list集合。在controller中获取前台提交的用户,封装成User对象,和获取list集合作为参数一起传入service中的login()方法。然后在service的login()方法中,循环遍历集合,判断user对象在list集合中存在。如果存在则可以将用户信息添加到session中。

祝学习愉快~

  • 提问者 qq_慕神0589333 #1
    监听器,过滤器是不得建在entity包下呢
    2021-04-20 19:46:14
  • 好帮手慕小脸 回复 提问者 qq_慕神0589333 #2

    同学你好,entity包是存放实体类的,这里建议将监听器,过滤器放置在对应包下,如:

    监听器放置在listener包,过滤器放置在filter包

    祝学习愉快~


    2021-04-21 09:39:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师