首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)

同时,我们将 id 列设置为自增主键,以便自动生成用户的 ID 值,并将其作为唯一标识符。...如果不指定盐值,则使用默认值。 plaintextPassword:明文密码。 hashedPassword:加密后的密码。...在保存密码时,不要直接将明文密码存储到数据库中,而应该存储加密后的密码。 在用户登录时,比对用户输入的明文密码和数据库中存储的加密后的密码是否一致。如果一致,则认证通过;否则认证失败。...根据用户名从数据库中查询用户信息:该方法会根据用户名从数据库中查询对应的用户信息。 b. 如果用户不存在,则认为登录失败:如果查询结果为空,则说明用户不存在,返回false。 c....对用户输入的密码进行加密处理,并将结果与数据库中的哈希值比较:否则,该方法会对用户输入的密码进行加密处理,得到哈希后的密码,再将其与数据库中的哈希值进行比较,如果相等则说明密码正确,返回true,否则说明密码错误

8800
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    okhttp——RetryAndFollowUpInterceptor

    此时会调用recover方法,如果recover方法再失败,会抛出RouteException中的FirstConnectException。...return true; } 首先我们调用应用层的失败回调,如果应用层返回false,就不再进行重试。 然后,我们判断请求的返回,如果请求已经开始或请求限定,只能请求一次,我们也不再进行重试。...明确告知了文件不存在,也不会再重复请求。 接下来,是okhttp认为的致命错误,不会再重复请求的,都会在isRecoverable方法中。致命错误包括:协议错误、SSL校验错误等。...如果返回是有效的,就直接return请求的返回。如果返回无效,则request=followUp,重走while循环,重新请求。 所以这一段的核心逻辑在于followUpRequest方法。...如果response的内容不需要重试,则直接返回null。如果需要重试,则根据response的内容,生成重试策略,返回重试发出的request。 其中,重定向和超时是最主要的重试情况。

    1.5K40

    接口安全方案提供和实践

    因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。...如果黑客修改timestamp参数为当前的时间戳,则sign1参数对应的数字签名就会失效,因为黑客不知道签名秘钥,没有办法生成新的数字签名。...此时服务端的处理流程如下:去 redis 中查找是否有 key 为 nonce:{nonce} 的 string如果没有,则创建这个 key,把这个 key 失效的时间和验证 timestamp 失效的时间一致...不存在 */ public boolean hasKey(String key) { try { return Boolean.TRUE.equals(...时间(秒) time要大于0 如果time小于等于0 将设置无限期 * @return true成功 false 失败 */ public boolean set(String

    2K71

    SpringBoot 如何保证接口安全?老鸟们都是这么玩的!

    因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。...如果黑客修改timestamp参数为当前的时间戳,则sign1参数对应的数字签名就会失效,因为黑客不知道签名秘钥,没有办法生成新的数字签名。...此时服务端的处理流程如下:去 redis 中查找是否有 key 为 nonce:{nonce} 的 string如果没有,则创建这个 key,把这个 key 失效的时间和验证 timestamp 失效的时间一致...不存在 */ public boolean hasKey(String key) { try { return Boolean.TRUE.equals(...时间(秒) time要大于0 如果time小于等于0 将设置无限期 * @return true成功 false 失败 */ public boolean set(String

    1.4K11

    MyBatisPlus新版代码生成器(Velocity模板引擎详解)

    变量   如果某个Velocity变量不存在,那么页面中就会显示xxx的形式,为了避免这种形式,可以在变量名称前加上!如页面中含有msg,如果msg有值,将显示msg的值;如果不存在就会显示msg。...这是我们不希望看到的,为了把不存在的变量显示为空白,可以使用!msg。...,则$var为hello abc #set($var = "hello $var1") ## 单引号将不解析其中引用,假设$var1为abc,则$var为hello $var1 #set($var =...如果为空,将下面子包名必须写全部, 否则就只需写子包名 .controller("controller")// 控制层包名...,如果表名以表结尾则去掉表名 #set ($tableComment = "") #set($end=$table.comment.length() - 1) #if(${table.comment.endsWith

    18310

    实战篇:解决swagger和自定义参数解析器的功能冲突

    然而它在参数解析器列表中的优先级比较高,自定义的参数解析器添加到参数解析器列表之后会排在它的后面,所以如果加上@RequestBody注解,自定义的参数解析器就失效了。...Definition属性值填充 Definition属性中填充了入参、出参等参数类型,如果没有相应的Model定义,则swagger信息就会是不完整的,在浏览器页面中的显示也会是不全的。...综合以上两张图的源代码分析,可以看到,swagger功能依赖于@RequestBody注解,入参如果不被该注解修饰,则swagger功能就会不完整,这和在springmvc中使用独立的参数解析器功能不得使用...解决问题 从以上分析可以得到结论,这里的根本问题是springmvc中独立的参数解析器功能和swagger功能上的冲突,一个要求不能加上@RequestBody注解,一个要求必须加上@RequestBody...expand() default false; } 将其加到入参上 @ApiOperation(value = "demo", notes = "demo") @PostMapping

    1.6K30

    Springboot整合Redis缓存机制

    则后端日志没有打印SQL语句,说明再次查询是从redis中获取而不是mysql中获取的。 此时我们测试第二个Rest接口 ? 此时数据库中多出一条数据 ? 我们再来看redis中的数据 ?...,那就是当用户查询了数据库中不存在的id的时候,缓存系统依然会将空值添加到redis中。...如果有恶意用户通过工具不断使用不存在的id进行访问的时候,一方面会对数据库造成巨大的访问压力,另一方面可能会把redis内存撑破。 比方说我们访问一个不存在的id=5的时候 ?...scheduleChange() { return scheduleTask(this::getAllCityForBloomFilter); } } 再编写一个布隆过滤器的AOP拦截,如果布隆过滤器中不存在该...这里需要注意的是,当我们查询出来的对象为null的时候抛出异常,这样可以避免在Redis中建立缓存。

    1.4K20

    【探花交友】用户登录总结

    请求参数:phone (Map) * 响应:void */ @PostMapping("/login") public ResponseEntity login(@RequestBody...redis验证码非空 或 验证码错误 则抛出异常         6.删除redis存的验证码(防止重复使用)         7.创建一个boolean值 isNew 默认是false(不是新用户)...        8.调用api传入手机号 查找用户         9.判断用户是否存在         8.如果不存在就是新用户 重新new一个(因为没查找出来是null 必须在new一个) 设置他的手机...号码 以及密码(密码默认123456 md5加密) 然后保存 返回它的用户id(这里我有点不懂 insert 之后 为什么user 就有id)         9.将id设置给user isNew=...isNew = false; //5、如果用户不存在,创建用户保存到数据库中 if(user == null) { user = new User

    69630

    @RequestBody和@RequestParam区别

    defaultValue 可设置请求参数的默认值。 value 为接收url的参数名(相当于key值)。...但是这样不支持批量插入数据啊,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。...转成‘yyyy-MM-dd’,则参数接收对象包含的字段如果是Date类型,就只能让客户端传递年月日的格式,不能传时分秒。...如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。...另外,还有一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping

    4.4K10

    springmvc 注解总结

    true,表示请求中一定要有相应的参数,否则将抛出异常; defaultValue:默认值,表示如果请求中没有同名参数时的默认值,设置该参数时,自动将required设为false。...Boolean包装类型:默认Boolean.FALSE,其他引用类型默认为null。 如果请求中有多个同名的应该如何接收呢?...首先,它从模型中取出数据并赋予对应的参数,如果模型中尚不存在,则实例化一个,并存放于模型中;其次,一旦模型中已存在此数据对象,接下来一个很重要的步骤便是将请求参数绑定到此对象上(请求参数名映射对象属性名...如果模型中尚不存在键名为“baseMember”的数据,则首先会调用BaseMember类的默认构造器创建一个对象,如果不存在默认构造器会抛出异常。...如果希望在多个请求中共享ModelMap中的属性,必须将其属性转存到session 中,这样 ModelMap 的属性才可以被跨请求访问。

    44510

    POST、GET、@RequestBody和@RequestParam区别

    defaultValue 可设置请求参数的默认值。 value 为接收url的参数名(相当于key值)。...如下图所示: 但是这样不支持批量插入数据啊,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。...转成‘yyyy-MM-dd’,则参数接收对象包含的字段如果是Date类型,就只能让客户端传递年月日的格式,不能传时分秒。...如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。...另外,还有一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping

    1.6K10

    POST、GET、@RequestBody和@RequestParam区别

    defaultValue 可设置请求参数的默认值。 value 为接收url的参数名(相当于key值)。...如下图所示: 但是这样不支持批量插入数据啊,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。...转成‘yyyy-MM-dd’,则参数接收对象包含的字段如果是Date类型,就只能让客户端传递年月日的格式,不能传时分秒。...如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。...另外,还有一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping

    4.6K21

    SpringMVC学习笔记(五) --- 异常处理、图片上传、Json数据交互、RESTful支持、拦截器

    : 步骤五:异常测试 修改商品信息,id输入错误提示商品信息不存在。...修改controller方法“editItem”,调用service查询商品信息,如果商品信息为空则抛出异常: // 调用service查询商品信息 Items item = itemService.findItemById...DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。...需要在controller中处理。 a) 判断用户名密码是否正确 b) 如果正确 想session中写入用户信息 c) 返回登录成功,或者跳转到商品列表 3、拦截器。...需要在controller中处理。 a)    判断用户名密码是否正确 b)    如果正确 想session中写入用户信息  c)    返回登录成功,或者跳转到商品列表 3、拦截器。

    73030

    Spring Cloud微服务,如何保证对外接口的安全?

    由于 HTTP 是一种无状态协议,服务端无法确定客户端发送的请求是否合法,也不了解请求中的参数是否正确。以一个充值接口为例: http://localhost/api/user/recharge?...步骤3:服务端比对 sign1 和 sign2 的值,若不一致,则认定为被篡改,判定为非法请求。 1.2. 什么是重放问题? 防重放也叫防复用。...如果看过我DDD&微服务系列中幂等方案的文章,对于nonce方案肯定比较熟悉,这就是幂等方案中的token机制,只不过此时幂等key是由客户端生成的。 2....重放校验 // 判断timestamp时间戳与当前时间是否操过60s(过期时间根据业务情况设置),如果超过了就提示签名过期。...在这种场景中,使用设计模式中的责任链模式是非常合适的选择。通过责任链模式,将校验逻辑分解为多个责任链节点,每个节点专注于一个方面的校验,使得代码更加清晰和易于维护。

    44910

    面试题之--SpringMVC 原理

    (项目基于spring3.2.x)但是发现请求死活无法进入preHandle里(项目里只有一个自定义的preHandle,不存在提前被别的HandlerInterceptor返回的情况)。...Spring 中的处理器的实现多变,可以通过实现 Controller 接口,也可以用 @RequestMapping 注解将方法作为一个处理器等,这就导致调用处理器是不确定的。...registerHandler也很简单,先根据url从map中取handler,如果存在多个handler则报错(一个url无法对应多个handler)。 没有则存入handler。...@ResponseBody 和@RequestBody的使用 ​ 一般controller的入参和出参都是json的形式,只需要使用注解@ResponseBody 和 @RequestBody...(RequestBody.class); } // 支持ResponseBody注解返回值 @Override public boolean supportsReturnType(MethodParameter

    12810

    Spring Boot 中的 @Field 注解详解

    当使用 @Field 注解时,Spring Boot 会根据注解中指定的属性名,在请求参数中查找同名的参数值,并将其自动转换为该属性的类型,然后赋值给该属性。...如果该参数不存在或者值为空,则会抛出 BindException 异常。如果设置为 false,则表示该参数可选,如果不存在或者值为空,则不会抛出异常,属性值将保持为默认值。...如果参数不存在或者值为空,并且设置了 defaultValue 属性,则将该属性设置为参数的默认值。...例如,我们有一个 HTTP 请求,其中 age 参数是可选的,如果不存在或者为空,则默认为 18 岁,可以使用如下代码进行绑定:@PostMapping("/user")public void createUser...,如果不指定,则默认与 value 属性相同。

    20610
    领券