Java全栈开发---Java ERP系统开发:商业ERP(十五,java面试简历项目经验

2、认证

(1)需求分析

判断当前用户是否登录,如果没有登录侧跳转到登录页面

(2)认证现实(重点)
1)Subject的login方法

修改LoginAction的checkUser方法

步骤:

创建令牌:UsernamePasswordToken

获取subject

执行subject.login()方法

在这里插入图片描述

public void checkUser() {

// 在登录的时候可能会发送异常

try {

/*

  • // 查询是否存在 Emp loginUser = empBiz.findByUsernameAndPwd(username, pwd);

  • System.out.println(loginUser+“emp”); if (loginUser != null) { // 记录当前登录的用户

  • ActionContext.getContext().getSession().put(“loginUser”, loginUser);//

  • 先把用户的信息放到session当中 ajaxReturn(true, “用户名或密码正确”); } else { ajaxReturn(false,

  • “用户名或密码不正确”); }

*/

// 1、创建令牌(通行证)身份认证,身份证明

UsernamePasswordToken upt = new UsernamePasswordToken(username, pwd);

// 2、获取主机subject:封装当前用户的操作

Subject subject = SecurityUtils.getSubject();

// 3、指向login

subject.login(upt);

ajaxReturn(true, “用户名或密码正确”);

} catch (Exception e) {

e.printStackTrace();

ajaxReturn(false, “登录失败”);

}

}

3、自定义Realm

我们改用subject.login方法后,并不会调用登陆的业务层进行登陆的验证查询,即不会从数据库查找登陆的用户名和密码是否正确,而是将这项工作交给 shiro去完成。

那 shiro,是怎么知道登陆的用户名和密码是否正确的呢?其实它也需要用到我的登陆验证业务,这时它就得向“别人”打听一下,那就是Realm了。

真正实现登陆验证的是Realm,而shiro只是去调Realm

Realm: Realm 充当了 Shiro与应用安全数据间的“桥梁"或者"连接器"。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的 Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的逐接细节,并在需要时将相关数据提供给 Shiro。当配置 Shiro,时,你必须至少指定一个 Realm,用于认证和或授权。

配置多个Realm 是可以的,但是至少需要一个。

1) 在erp_web子工程下创建包 com.itzheng.erp.realm:

在这里插入图片描述

2)创建ErpRealm类继承自AuthorizingRealm

在这里插入图片描述

在这里插入图片描述

package com.itzheng.erp.realm;

import org.apache.shiro.authc.AuthenticationException;

import org.apache.shiro.authc.AuthenticationInfo;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authz.AuthorizationInfo;

import org.apache.shiro.realm.AuthorizingRealm;

import org.apache.shiro.subject.PrincipalCollection;

public class ErpRealm extends AuthorizingRealm {

/*

  • 授权

*/

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

System.out.println(“执行的授权的方法。。。”);

return null;

}

/*

  • 认证

  • return null;认证失败,返回AuthenticationInfo实现类,认证成功

*/

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

System.out.println(“执行的授权的方法。。。”);

return null;

}

}

3)修改applicationContext_shiro.xml

在这里插入图片描述

4)修改ErpRealm的doGetAuthenticationInfo方法

在这里插入图片描述

public class ErpRealm extends AuthorizingRealm {

private IEmpBiz empBiz;

/*

  • 授权

*/

public void setEmpBiz(IEmpBiz empBiz) {

this.empBiz = empBiz;

}

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

System.out.println(“执行的授权的方法。。。”);

return null;

}

/*

  • 认证 return null;认证失败,返回AuthenticationInfo实现类,认证成功

*/

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

System.out.println(“执行的授权的方法。。。”);

//通过令牌 用户名和密码?

UsernamePasswordToken upt = (UsernamePasswordToken) token;

//得到密码

String pwd = new String(upt.getPassword());

//调用登录查询

Emp emp = empBiz.findByUsernameAndPwd(upt.getUsername(), pwd);

if(null != emp) {

//构造参数1,主角=登录用户

//参数2:授权码

//参数3,realm的名称

SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(emp,pwd,getName());

return info;

}

return null;

}

}

5)修改applicationContext_shiro.xml

在这里插入图片描述

6)修改LoginAction,以及对应的配置文件

在这里插入图片描述

/*

  • 显示登录用户

*/

public void showName() {

// 获取当前登录的用户

//Emp emp = (Emp) ActionContext.getContext().getSession().get(“loginUser”);// 先把用户的信息放到session当中

// session是否会超时,用户是否登录过

//获取主题

Subject subject = SecurityUtils.getSubject();

//提取主角,拿到emp

Emp emp =(Emp)subject.getPrincipal();

System.out.println(emp);

if (null != emp) {

System.out.println(emp + “yyyy”);

ajaxReturn(true, emp.getName());

} else {

ajaxReturn(false, “”);

}

}

在这里插入图片描述

/*

  • 退出登录

*/

public void loginOut() {

// ActionContext.getContext().getSession().remove(“loginUser”);

SecurityUtils.getSubject().logout();

}

applicationContext_shiro.xml

在这里插入图片描述

7)修改BaseAction的getLoginUser方法

在这里插入图片描述

/*

  • 获取登录的用户信息

*/

public Emp getLoginUser() {

//Emp emp = (Emp) ActionContext.getContext().getSession().get(“loginUser”);

return (Emp) SecurityUtils.getSubject().getPrincipal();

}

4、授权(指定电脑的那些资源可以被访问)

(1)需求分析

授权就是通过设置规则,指定URL需要哪些授权才可以访问

在这里插入图片描述

(2)授权的实现

在这里插入图片描述

1)授权方法与配置(重点)
a、修改ErpRealm的doGetAuthorizationInfo方法

在这里插入图片描述

System.out.println(“执行了授权的方法…”);

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

// uuid=?怎么来

Emp emp = (Emp) principals.getPrimaryPrincipal();

// 获取当前登陆用户的菜单权限

List

menuList = empBiz.getMenusByEmpuuid(emp.getUuid());

b、配置权限名称:修改applicationContext_shiro.xml

在这里插入图片描述

/error.html = anon

/login_*.action = anon

/login_*=anon

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-YhYIheD3-1711751203123)]

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

[外链图片转存中…(img-PfOD0xxv-1711751203124)]

Mybatis面试专题

[外链图片转存中…(img-emZ3B8YR-1711751203124)]

MySQL面试专题

[外链图片转存中…(img-FUPen1jB-1711751203125)]

并发编程面试专题

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值