尚学堂057天总结+过滤器filter

053天
行百里者半九十,想要在一个行业里成为顶尖人才,一定满足一万小时定律,要想学好JAVA,需要持之以恒不断地努力,每天都要勤思考+善于询问+解决问题!

知识温故而知新>>>>>>

web.xml的配置

尚学堂057天总结+过滤器filter_第1张图片
image.png

今天学到的知识>>>>>>

乱码问题产生的原因和处理办法

尚学堂057天总结+过滤器filter_第2张图片
image.png

welcome-file-list的配置和作用

尚学堂057天总结+过滤器filter_第3张图片
image.png

监听器的接口的分类和区别

尚学堂057天总结+过滤器filter_第4张图片
image.png

监听器接口的详细方法

尚学堂057天总结+过滤器filter_第5张图片
image.png

wed.xml中配置监听器的方法

image.png

过滤器的相应接口和方法

尚学堂057天总结+过滤器filter_第6张图片
image.png

wed.xml中配置过滤器的的方法

尚学堂057天总结+过滤器filter_第7张图片
image.png

习题的情况总结>>>>>>

过滤器的作用

用户认证与授权管理:我们开发一个web应用,肯定有不同权限的用户,有管理员,有普通用户。而管理员又可能分为一级管理员,二级管理员,三级管理员。每一级管理员可能又有不同的管理权限操作,访问不同的资源。过去我们可能都是在jsp页面,servlet中加以权限的控制。通过session,看他是否有这个权限,如果有,则让他操作某个资源。这些都是些共性。那么现在我们就可以把他提取出来。让他通过过滤器来实现;用户来访问一个资源,我们通过过滤器来过滤这个请求,在程序中判断是否有权限来访问这个资源;有,则让他去访问,没有,就让他转到另外一个页面。这样通过过滤器就实现了授权管理;

权限管理的需求是什么?

不同的用户在对同一功能使用时,有的用户可以直接使用,有的用户会被提示权限不足。
视频中讲解的思路是什么?

1、在数据库中创建一个URL权限表,该表存储了该系统需要被管理的URL。
2、在数据库中创建用户权限中间表,用来进行权限分配
3、在数据库中将权限给用户分配好
4、在用户登录成功后查询该用户具备的URL权限,存储到该用户的session中
5、在过滤器中对当前发起请求的用户的请求地址进行校验,校验该用户是否具备该请求地址的权限,如果具备则放行执行,如果不具备则提示权限不足。

监听器的接口和相应方法

//ServletRequestListener,HttpSessionListener,,ServletContextListener为监听状态的接口(创建与销毁)
//ServletRequestAttributeListener,HttpSessionAttributeListener,ServletContextAttributeListene为监听属性的接口(值发生变化){
public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,HttpSessionListener,HttpSessionAttributeListener,ServletContextListener,ServletContextAttributeListener{
    //监听Request对象的创建和销毁
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("request对象被销毁了");
            
        }
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            ServletRequest req = sre.getServletRequest();
            System.out.println("request对象被创建了");
            
        }
    //监听request对象作用域数据的增加、修改、删除
        @Override
        public void attributeAdded(ServletRequestAttributeEvent srae) {
            System.out.println("request中增加了一条数据");
        }
        @Override
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
            // TODO Auto-generated method stub
            
        }
    //监听session的创建和销毁
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println("session被创建了11111");
            
        }
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("session被销毁了");
            
        }
    //监听session数据的增加、删除、修改
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
            System.out.println("session中增加了数据");

        }
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event) {
            // TODO Auto-generated method stub
            
        }
    //监听application对象的创建(初始化)和销毁
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            // TODO Auto-generated method stub
            
        }
    //监听application对象的数据的增加,删除,修改
        @Override
        public void attributeAdded(ServletContextAttributeEvent event) {
            
        }
        @Override
        public void attributeRemoved(ServletContextAttributeEvent event) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(ServletContextAttributeEvent event) {
            // TODO Auto-generated method stub
            
        }
}

过滤器的接口和相应方法

//实现Filter接口
public class MyFilter 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 {
        //设置请求编码格式
        request.setCharacterEncoding("utf-8");
        //设置响应编码格式
        response.setContentType("text/html;charset=utf-8");
        //强转request对象
        HttpServletRequest req=((HttpServletRequest)request);
        //强转response对象
        HttpServletResponse resp=((HttpServletResponse)response);
        //获取此次请求uri
        String uri=req.getRequestURI();
        //获取此次请求的method
        String method=req.getParameter("method");
        System.out.println("当前请求的uri为:"+uri);
        //放行登录页面  放行登录请求 放行静态资源
            if("/project2/login.jsp".equals(uri) || ("/project2/data".equals(uri)&& "userLogin".equals(method)) || uri.startsWith("/project2/css/") || uri.startsWith("/project2/js/")|| uri.startsWith("/project2/images/")){
                //放行
                chain.doFilter(request, response);
            }else{
                //session管理(session统一校验)
                    //获取Session对象
                        HttpSession session = req.getSession();
                        Object obj=session.getAttribute("user");
                    //判断
                        if(obj!=null){
                            //获取权限信息
                                List lu=(List) session.getAttribute("lu");
                            //权限校验
                                for(Url url:lu){
                                    if(url.getLocation().equals(method) || url.getLocation().equals(uri)){
                                        //放行
                                        chain.doFilter(request, response);
                                        return;
                                    }
                                }
                            //响应
                                resp.getWriter().write("power");
                                return;
                        }else{
                            //重定向到登录页面
                            resp.sendRedirect("/project2/login.jsp");
                        }
            }
    }
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
}

你可能感兴趣的:(尚学堂057天总结+过滤器filter)