黑马商城05

黑马商城05

今日任务:
1.后台页面搭建(了解 听一听)
2.分类展示
3.分类添加
4.分类修改
5.分类删除

1.分类展示

		前端:
		      请求分类数据
		      for循环追加拼串
		后端:
		      查分类数据并返回       

2.分类添加

		前端:
		      请求添加servlet
		      携带添加的内容
		后端:
		      接收请求
		      调用插入数据dao
		      注意:插入完要刷新数据,因为从缓存拿的数据,
		      mysql和redis里数据不一致,覆盖掉就好了       

3.分类修改

修改性的操作 无论修改是啥 
	都应该包含 两步
		1.回显 先把原来的数据给展示出来

			注意:
				一定带参数 带唯一标识  不要带数据 没意义
		
		2.把新数据提交服务器 完成修改功能
        前端:
            携带分类id和分类名字向后台查询
        后端:
             更新数据并刷新redis

4.分类删除

      前端:
             携带分类id提交给服务器
             响应状态为1跳转,响应其他抛异常
      后端:
             拿到分类id向商品表查询,如果分类表底下没有数据,就删除
             如果有数据,就抛出自定义异常

5.使用filter来实现粗和细粒度权限控制

思想:

     后端:
            粗粒度
                 加一个过滤器,只要访问这个servlet,就需要登录
             细粒度
                 弄一个配置文件,把不需要登录的servlet,写到配置文件里

粗粒度代码实现:
XAuthFilter

@WebFilter("/order/*")
public class XAuthFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;

        User user = (User)request.getSession().getAttribute("user");
        if(user==null){
            ResultVo vo = new ResultVo(ResultVo.CODE_NOLOGIN,"","");
            String s = new ObjectMapper().writeValueAsString(vo);
            resp.getWriter().print(s);
            return;
        }
   }
}

细粒度代码实现:

auth.properties

order.xx=false
order.generate=true

XAuthFilter
没有写完,大概意思就是读配置文件,然后判断,false不登陆,true登录

       String md = request.getParameter("md");
        String requestURI = request.getRequestURI();
        int i = requestURI.lastIndexOf("/");
        String substring = requestURI.substring(i+1);
        String str = substring+"."+md;
       ResourceBundle str1 = ResourceBundle.getBundle("auth");
        String string = str1.getString(str);
        System.out.println(string);

6.使用注解来实现方法级别权限控制

思路:

通过注解的方式来判断需不需要登录

注解 Auth.java

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auth {
    String value() default "ROLE_USER";
}

BaseServlet

  //判断该方法是否存在@auth的注解
  if(method.isAnnotationPresent(Auth.class)){
      //存在就需要登录
      User user = (User)request.getSession().getAttribute("user");
      if(user==null){
          nologin();
          return;
      }
  }

7.使用注解属性做更加细粒度的权限控制

思想:

判断注解里的值,来向浏览器返回相应权限的数据

BaseServlet

            //判断该方法是否存在@auth的注解
            if(method.isAnnotationPresent(Auth.class)){
                //存在就需要登录
                User user = (User) request.getSession().getAttribute("user");
                if (user==null){
                    nologin();
                    return;
                }
                //代码走到这 说明方法是需要登录 且已经登录了
                //首先获取注解对象 然后获取它的值
                Auth auth = method.getAnnotation(Auth.class);

                String role = auth.value();

                if (!role.equals(user.getRemark())){
                    authFail();
                    return;
                }
            }
            //执行方法
            method.invoke(this,request,response);

OrderServlet

    @Auth("ROLE_USER")
    protected void yy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("我是需要登录的");
    }
    @Auth("ROLE_ADMIN")
    protected void zz(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("我是需要登录的 还得是管理员");
    }

数据库
在这里插入图片描述

枚举(了解)

用法:固定的情况,就那几种情况,不会有变动,例子:红绿灯
RoleClass

public class RoleClass {
    public static final int LEVEL_GUEST=0;
    public static final int LEVEL_USER=1;
    public static final int LEVEL_ADMIN=2;
    private int level;
    //规定 0 游客  1 普通用户 2 管理员

    public static final RoleClass GUEST=new RoleClass(0);
    public static final RoleClass USER=new RoleClass(1);
    public static final RoleClass ADMIN=new RoleClass(2);

    private RoleClass() {
    }

    private RoleClass(int level) {
        this.level = level;
    }

    public int getLevel() {
        return level;
    }
}

RoleEnum

public enum RoleEnum{
    GUEST(0),USER(1),ADMIN(2);

    RoleEnum(int level) {
        this.level = level;
    }

    private int level;

    public int getLevel() {
        return level;
    }
}

Demo

public class Demo {
    public static void main(String[] args) {
        //RoleClass GUEST = new RoleClass(RoleClass.LEVEL_GUEST);

        //RoleClass xx = new RoleClass(4);

        operate(RoleClass.USER);
        operate1(RoleEnum.ADMIN);

    }
    public static void operate(RoleClass roleClass){
        if (roleClass.getLevel()==0){
            System.out.println("给10块优惠");
        }
        if (roleClass.getLevel()==1){
            System.out.println("给100块优惠");
        }
        if (roleClass.getLevel()==2){
            System.out.println("给1000块优惠");
        }
    }
    public static void operate1(RoleEnum roleEnum){
        if (roleEnum.getLevel()==0){
            System.out.println("给10块优惠");
        }
        if (roleEnum.getLevel()==1){
            System.out.println("给100块优惠");
        }
        if (roleEnum.getLevel()==2){
            System.out.println("给1000块优惠");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值