*简介 :本课程采用Spring+MyBatis+Shiro完成药品库存管理系统,项目分为两类用户,数据库设、编码到页面展示全手工一步一步编写。
在以前的开发中都是采用 action 方法中编写相应的业务,现在我们建立一个 realm 实现数据处理(包括认证、授权);
这个类不需要手工编写了,在之前 shiro 课程中都有详细的说明;
范例:登录认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws
AuthenticationException {
log.info("========登录授权认证========");
// 1 、取得用户名
String username = (String) authenticationToken.getPrincipal();
try {
Admin vo = this.adminService.show(username);
if (vo == null) {
throw new UnknownAccountException("用户不存在!");
} else {
// 2 、取得登录密码
String password = (new String((char[]) authenticationToken.getCredentials()));
if (vo.getPassword().equals(password)) {
AuthenticationInfo auth = new SimpleAuthenticationInfo(username, password, "adminRealm");
return auth;
} else {
throw new IncorrectCredentialsException("密码错误!");
}
}
} catch (Exception e) {
e.printStackTrace(); `
}
return null;
}
范例:修改 applicationContext.xml 文件
<! -- 配置 SecurityManager 的管理
-- >
<bean id="adminRealm" class="cn.xmkeshe.realm.AdminRealm"/>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<! -- 配置需要使用的 Realm -- >
<property name="realm" ref="adminRealm"/>
</bean>
范例:定义控制层代码实现登录检测
@RequestMapping("login")
public void login(Admin vo, HttpServletResponse response) throws IOException {
// 数据验证
if (ValidateUtils. validateEmpty (vo.getAid()) && ValidateUtils. validateEmpty (vo.getPassword())) {
String aid = vo.getAid(); // aid
String password = new MD5Code().getMD5ofStr(vo.getPassword());
UsernamePasswordToken token = new UsernamePasswordToken(aid, password);
Subject sub = SecurityUtils. getSubject ();
response.getWriter().print("success");
sub.login(token);
} else {
response.getWriter().print("errorNull");
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200421172356234.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lsY3Rv,size_16,color_FFFFFF,t_70#pic_center)