定义页面的首页:
在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接口是实现了该接口
用户的退出实现: