Java登录与注册实战、aop spring实现

Java登录与注册实战

一、单点登录的三种常用方式
第一种:session广播机制实现
第二种:使用cookie+redis实现
第三种:使用token实现
目前使用最多的是第二种,一般要考虑到某一个时间段用户注册的数量,比如做活动推广的时候;这时除了利用redis缓存,还需要加大带宽等等;
其次是使用token;目前这两种用的比较多。
postman在测试接口的时候也常常复制自己的登录信息测通接口,或者设置白名单机制。

第二种:使用cookie+redis实现
1、redis(key-value):key唯一值,value用户数据;
cookie:把redis生成key–》cookir 2、访问项目中其他模块,发送请求带着cookie进行发送,获取cookie值,拿着cookie做功能。

也就是把cookie获取值,到redis进行查询,根据key进行查询,如果查询到数据就是可以登录。

第三种情况:带token
1、按照一定规则生成字符串,可以包含用户信息(加密)
(1)可以把字符串通过cookie返回
(2)可以把字符串通过地址栏返回 2、再去访问项目其他模块,每次访问在地址栏带着生成字符串,在访问模块里面获取地址栏字符串,根据字符串获取用户信息。如果可以获取,则可以登录。

二、登录开发流程、思路
1、获取手机号和密码、验证码(现在有很多登录接口是不用密码,那么直接初始化的密码即可)
2、校验手机号和密码、验证码是否为空
3、校验手机号和密码、验证码是否符合格式(正则表达式)
4、判断该用户对象是否存在数据库(过滤条件下)
5、判断密码(解密)
6、判断用户是否禁用(可以在4直接过滤) 7、登录成功,生成token字符串,使用jwt工具类

三、注册开发流程、思路
1、获取手机号和密码、验证码(现在有很多登录接口是不用密码,那么直接初始化的密码即可)
2、校验手机号和密码、验证码是否为空
3、校验手机号和密码、验证码是否符合格式(正则表达式)
4、判断手机号是否存在数据库—》已经注册或账号不正常 5、获取到的信息数据插入数据库中

aop spring实现

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * 配置类
 */
//启动代理
@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
    @Bean
    public WorkClass calculator() {
        return new WorkClass();
    }

    @Bean
    public LogAspects logAspects() {
        return new LogAspects();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
/**
 * 业务类
 */
public class WorkClass {
    public int test() {
        System.out.println("====================hello");
        return 1;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
/**
 * 切面类
 */
@Aspect
public class LogAspects {

    @Pointcut("execution(public int com.report.server.util.WorkClass.*(..))")
    public void pointCut() {};

    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        System.out.println(" " + joinPoint.getSignature().getName() + "run........@Before:"
            + Arrays.asList() + "" + args);
    }

    @After("com.report.server.util.LogAspects.pointCut()")
    public void logEnd(JoinPoint joinPoint) {
        System.out.println(joinPoint.getSignature().getName() + "....end @After");
    }

    @AfterReturning(value = "pointCut()", returning = "result")
    public void logReturn(JoinPoint joinPoint, Object result) {
        System.out.println(joinPoint.getSignature().getName() + "正常返回。。。@AfterReturning:reuslt:" + result);

    }

    @AfterThrowing(value = "pointCut()", throwing = "exception")
    public void logException(JoinPoint joinPoint, Exception exception) {
        System.out.println(joinPoint.getSignature().getName() + "异常新:" + exception);
    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
/**
 * 帮助工具类测试
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ReportApplication.class)
public class UtilClassTest {


    @Test
    public void testee() {
        System.out.println("00000");
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAOP.class);
        WorkClass bean = applicationContext.getBean(WorkClass.class);
        bean.test();
        applicationContext.close();

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

结果

00000
 testrun........@Before:[][Ljava.lang.Object;@2e47ec5e
====================hello
test....end @After
test正常返回。。。@AfterReturning:reuslt:1
  • 1
  • 2
  • 3
  • 4
  • 5

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容