wisdomsell-day4(智能商贸系统第四天)
1.解决输入懒加载出现的页面无法显示问题(提示noSession)
在xml中配置一个过滤器
过滤器会让mannger对象在最后时候才关闭而不会提早关闭
<filter>
<filter-name>openEntityManager</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openEntityManager</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.解决配置过滤器后出现的没有序列化问题
两种方式,一种是打注解
@JsonIgnoreProperties(value={"hibernateLazyInit", "Handler","filedhanler"})
private Department department;
但是这种方式以后如果类多了,关联多了,每个都要打,容易引发耦合错误
所以最好选第二种方式:第一步创建一个类
//解决懒加载出现的无法序列化问题
public class CustomMapper extends ObjectMapper {
public CustomMapper() {
this.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 设置 SerializationFeature.FAIL_ON_EMPTY_BEANS 为 false
this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
}
第二步在spring-mvc中将注解改一下
3.解决修改部门时出现的n to n 错误
原因:数据传过来时,spring通过set方式将数据放入到Employee对象中,但是在这些字段中,有一个字段是dapartment.id,就是这个“.”引起的n to n 错误,因为,点前面的数据都是通过get来获取到,然后再通过对象.set放入,此时放入的id就有可能和传过来的id不同,导致oid被修改,引发n to n 错误
解决办法
public Employee beforeUpdate(Long id,String cmd){
if(id!=null&&"update".equals(cmd)){
Employee employee = employeeService.findOne(id);
//解决修改部门时出现n to n错误
//错误出现原因:传过来的字段过来有一个是department.id,而id前面的在spring里面都是先get然后再set,此时就可能会出现被修改
//解决办法原因:将部门设置为空,此时spring就是重新new一个对象出来,此时就会避免oid被修改了
employee.setDepartment(null);
return employee;
}
return null;
}
4.引入shiro框架
主要是为了引入权限
shiro框架是一个轻量级的java安全框架
最核心的是四大基石
分别为身份验证,授权,会话管理,密码安全学
4.1quickStart
导包
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
配置shiro.ini
# -----------------------------------------------------------------------------
# 这个文件中就是咱们的:用户,角色,权限,资源等
# users:代表下面的都是用户
# root:用户名 123456:密码 admin:角色
# -----------------------------------------------------------------------------
[users]
root = 123456, admin
guest = guest, guest
gu = 123456,it
# -----------------------------------------------------------------------------
# roles:角色
# admin = * admin角色可以做任何事
# it = employee:save :it部可以添加员工
# -----------------------------------------------------------------------------
[roles]
admin = *
guest = employee:*
it = employee:save
测试
public class ShiroTest {
//shiro的关键是要得到权限管理器,因为它的所有功能都是在权限管理器里面完成的
@Test
public void test()throws Exception {
//1.先创建一个工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.得到权限管理器
SecurityManager securityManager = factory.getInstance();
//3.放入到工具类中
SecurityUtils.setSecurityManager(securityManager);
//4.得到当前用户
Subject subject = SecurityUtils.getSubject();
System.out.println(subject.isAuthenticated());
//判断该用户是否登陆
if(!subject.isAuthenticated()){
UsernamePasswordToken token = new UsernamePasswordToken("root", "123456");
subject.login(token);
}
System.out.println("是否登陆"+subject.isAuthenticated());
}
}