
阿昌带你一起学习若依之【项目结构、登录实现】 -若依开源项目
蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支
- 我们先看看他接受前端发来的登录实体类里面的属性是什么
public class LoginBody
{
/**
- 用户名
*/
private String username;
/**
- 用户密码
*/
private String password;
/**
- 验证码
*/
private String code;
/**
- 唯一标识
*/
private String uuid = “”;
…//省略get/set()方法
}
-
发现他有用到验证码和uuid
-
然后我们打断点,输入账号密码验证码发个请求看看
- 阿昌发现一个问题,在实体类中没有定义uuid,为什么他就生成了uuid的值,看样子是随机生成的
- 想到之前有验证码的请求,于是我们去看看验证码的请求
- 通过上面同样的方法快速定位到
/captchaImage
接口的位置
@RestController
public class CaptchaController
{
@Resource(name = “captchaProducer”)
private Producer captchaProducer;
@Resource(name = “captchaProducerMath”)
private Producer captchaProducerMath;
@Autowired
private RedisCache redisCache;
// 验证码类型
@Value(“${ruoyi.captchaType}”)
private String captchaType;
/**
- 生成验证码
*/
@GetMapping(“/captchaImage”)
public AjaxResult getCode(HttpServletResponse response) throws IOException
{
// 保存验证码信息
String uuid = IdUtils.simpleUUID();
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
String capStr = null, code = null;
BufferedImage image = null;
// 生成验证码
if (“math”.equals(captchaType))
{
String capText = captchaProducerMath.createText();
capStr = capText.substring(0, capText.lastIndexOf(“@”));
code = capText.substring(capText.lastIndexOf(“@”) + 1);
image = captchaProducerMath.createImage(capStr);
}
else if (“char”.equals(captchaType))
{
capStr = code = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
}
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try
{
ImageIO.write(image, “jpg”, os);
}
catch (IOException e)
{
return AjaxResult.error(e.getMessage());
}
AjaxResult ajax = AjaxResult.success();
ajax.put(“uuid”, uuid);
ajax.put(“img”, Base64.encode(os.toByteArray()));
return ajax;
}
}
- 代码如上,发现他的验证码类型可以更换,他读取的是配置文件中的值,我们去配置文件中看
- 验证码生成的使用
- 我们打个debug断点看看验证码的情况
- 我们点进去看看
redisCache
他是怎么写的,他封装了redisTemplete,向redis存值
- 到这里知道了uuid是在验证码的请求中生成的,那他为什么在/login登入请求就自带了?????
- 阿昌就去看了看前端部分,找到这个前端的页面
- 发现他在created()生命周期就调用了getCode()函数,我猜就是获取验证码的函数
- 我们看看getCodeImg() js脚本是什么样子的,来源在/src/api/login.js里面
- 跟阿昌想的一样,他就是获取验证码的js脚本
到此我们就知道了他前端请求了后端的验证码接口,并给对象赋值,所以前端就显示了图片验证码,然后验证码的谜底就储存在redis中,我们就继续向下走
- 既然我们在看前端了,那我们就继续看前面
- 我们向下看,发现我们上面进入这个页面就会调getCode()方法,然后点击验证码也会调用getCode()方法
- 我们先看到登录请求的前端js脚本
- 回到后端,打上断点,输入账号密码,查看debug
- 他执行了login方法,我们进去看看
- 最后生成token↑
-
阿昌发现这里并没有获取到存储我们后端发来的token,那他是在哪里存储的呢?
-
然后我们去store下面看看
- 发现他设置了token,res.token
- setToken的来源在哪里,ctrl+左键点
SET_TOKEN
- 发现他在Cookie中通过set(),将token设置到了cookie中
- 然后他们一般会帮axious封装到request.js 脚本中
总结
蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。
经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
然后他们一般会帮axious封装到request.js 脚本中
总结
蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。
经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
[外链图片转存中…(img-VBiclBkK-1714816557000)]
更多推荐
所有评论(0)