SSM框架之案例企业权限管理系统(二)

定义页面的首页:

在web模块下的index页面进行页面跳转

 

商品新建的流程:

 

继续配置 日志

将log4j文件放在resource下

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
# log4j.appender.LOGFILE=org.apache.log4j.FileAppender
# log4j.appender.LOGFILE.File=d:\axis.log
# log4j.appender.LOGFILE.Append=true
# log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
# log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

 

PageHelper的使用

导入依赖

pagehelper 是mybatis的,但是ssm是整合了spring和mybatis,所以直接在spring配置文件中配置pagehelper

然后在执行真正分页语句的前一个写上pageHelper的代码,serviceImpl中:

在页面上需要添加参数page 和 size 

 

controller层:

如何表示 首页 和 尾页

pageinfo源码

 

从订单表信息里查询出多表的信息,比如查询乘客的信息,商品的信息等等,多表查询操作

一对一 和 一对多

 //涉及到了多表操作
    @Select("select * from orders where id=#{ordersId}")
    @Results({
            @Result(id=true,property = "id",column = "id"),

            @Result(property = "orderNum",column = "orderNum"),

            @Result(property = "orderTime",column = "orderTime"),

            @Result(property = "orderStatus",column = "orderStatus"),

            @Result(property = "peopleCount",column = "peopleCount"),

            @Result(property = "payType",column = "payType"),

            @Result(property = "orderDesc",column = "orderDesc"),

            @Result(property = "product",column = "productId",javaType = Product.class, one = @One(select = "com.atshiyou.ssm.dao.IProductDao.findById")),

            @Result (property = "member",column = "memberId",javaType = Member.class, one = @One(select = "com.atshiyou.ssm.dao.IMemberDao.findById")),

            //多对多的关系,如何处理???
            @Result(property = "travellers",column = "id",javaType =java.util.List.class,many = @Many(select = "com.atshiyou.ssm.dao.ITravellerDao.findByOrdersId")),

    })
    public Orders findById(String ordersId) throws Exception;

查询商品 product 和member 成员 的时候都是一对一的关系,所以选择的是one,当需要查询旅客的信息的时候,订单和游客是一个多对多的关系,使用many,使用中间表order_traveller查询

ITravellerDao.findByOrdersId

@Select("select * from traveller where id in (select travellerId from order_traveller where orderId=#{ordersId})")
    public List<Traveller> findByOrdersId(String ordersId)throws Exception;

 

 

 

用户 角色 权限的关系

 

用户表和角色表中间通过users_role关联

角色表和权限表通过role_permission关联

 

 

使用数据库完成spring security认证操作

 

 

这里的spring security配置文件 完成了相当于controller的功能

 

配置spring security的内容

配置不被拦截的页面

配置使用数据库的认证操作,参考了userservice 

我们自己定义了一个userServiceImpl,自己命名为userservice。

其中需要自己重写一个loadUserByUsername的方法,方法内存使用dao,通过用户名查询出用户的信息,用户信息的类为userinfo,这里就会引出一个问题:这个函数返回的对象类型是UserDetails 而我们的查询出来的数据是一个userInfo类型,怎么转化呢?

查看源码发现user实现了userDetails,我们就创建一个user对象,然后返回就是UserDetails对象了

user对象里的代码

public User(String username, String password,
			Collection<? extends GrantedAuthority> authorities) {
		this(username, password, true, true, true, true, authorities);
	}
   User user = new User(userInfo.getUsername(), "{noop}"+userInfo.getPassword(),userInfo.getStatus()==0 ? false : true,true,true,true,getAuthority(userInfo.getRoles()));
        return user;

代码里的getAuthority方法也需要重写:返回的是一个

SimpleGrantedAuthority这样的一个集合

整个的spring用户认证代码就是:

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        UserInfo userInfo = null;
        try {
            userInfo = iUserDao.findByUsername(username);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //这里的User是spring security为我们提供的,不是我们自己创建的,
        //处理自己的用户对象封装成UserDatils,User是实现了UserDetail
       // User user = new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority(userInfo.getRoles()));
        User user = new User(userInfo.getUsername(), "{noop}"+userInfo.getPassword(),userInfo.getStatus()==0 ? false : true,true,true,true,getAuthority(userInfo.getRoles()));
        return user;
    }

    //作用就是返回一个List集合,集合中装入的就是角色的权限
    public  List<SimpleGrantedAuthority> getAuthority(List<Role> roles) {

        List<SimpleGrantedAuthority> list = new ArrayList<>();

        for(Role role:roles) {
            list.add(new SimpleGrantedAuthority("ROLE_"+role.getRoleName()));
        }
        return list;


    }

 

springsecurity启动时会自动调用接口,userService接口是实现了该接口

 

用户的退出实现:

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值