要登陆后才能购买,因此我们先写购买模块.
当点击登陆按钮的时候,把数据带过去给Servlet,让Servlet调用BusinessService方法,实现登陆。注册同理.....因此,我们需要用到JavaScript代码
在前台用户界面中,当用户要把购物车付款时,应该提供生成订单的超链接....
一个订单对应多个订单项,这是一对多的关系!
CREATETABLEorders(idVARCHAR(40)PRIMARYKEY,dateDATENOTNULL,user_idVARCHAR(40)NOTNULL,stateBOOLEAN,priceDOUBLE,CONSTRAINTuser_id_FKFOREIGNKEY(user_id)REFERENCESuser(id));CREATETABLEorderItem(idVARCHAR(40)PRIMARYKEY,priceDOUBLE,quantityINT,order_idVARCHAR(40),book_idVARCHAR(40),CONSTRAINTorder_id_FKFOREIGNKEY(order_id)REFERENCESorders(id),CONSTRAINTbook_id_FKFOREIGNKEY(book_id)REFERENCESbook(id));
目前为止,我们已经学习了动态代理技术和注解技术了。于是我们想要为之前的bookStore项目添加权限控制.....
只有用户有权限的时候,后台管理才可以进行相对应的操作.....
之前我们做权限管理系统的时候,是根据用户请求的URI来判断该链接是否需要权限的。这次我们使用动态代理的技术和注解来判断:用户调用该方法时,检查该方法是否需要权限...
根据MVC模式,我们在web层都是调用service层来实现功能的。那么我们具体的思路是这样的:
上次我们做的权限管理系统是引入了角色这个概念的,这次主要为了练习动态代理和注解技术,就以简单为主,不引入角色这个实体。直接是用户和权限之间的关系了。
publicclassPrivilege{privateStringid;privateStringname;publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}数据库表CREATETABLEprivilege(idVARCHAR(40)PRIMARYKEY,nameVARCHAR(40));privilege和user是多对多的关系,于是使用第三方表来维护他们的关系
CREATETABLEuser_privilege(privilege_idVARCHAR(40),user_idVARCHAR(40),PRIMARYKEY(privilege_id,user_id),CONSTRAINTprivilege_id_FKFOREIGNKEY(privilege_id)REFERENCESprivilege(id),CONSTRAINTuser_id_FK1FOREIGNKEY(user_id)REFERENCESuser(id));添加测试数据为了方便,直接添加数据了。就不写详细的DAO了。
后面在动态代理中,我们需要检查该用户是否有权限...那么就必须查找出该用户拥有的哪些权限。再看看用户有没有相对应的权限
//查找用户的所有权限publicList
publicclassPrivilegeExceptionextendsException{publicPrivilegeException(){super();}publicPrivilegeException(Stringmessage){super(message);}publicPrivilegeException(Stringmessage,Throwablecause){super(message,cause);}publicPrivilegeException(Throwablecause){super(cause);}}我们继承的是Exception,通过方法名抛出去。但是我们是通过代理对象调用方法的,于是sun公司的策略就是把它们转换成运行期异常抛出去。
因此,我们就在Servlet上得到异常,再给出友好的提示。。
该权限控制是十分优雅的,只要我在Service层中添加一个注解...那么当web层调用该方法的时候就需要判断用户有没有该权限....