验证码
This commit is contained in:
		| @@ -35,13 +35,13 @@ | ||||
|             <artifactId>druid-spring-boot-starter</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
| <!--        <!– 滑块验证码  –>--> | ||||
| <!--        <dependency>--> | ||||
| <!--            <groupId>com.github.anji-plus</groupId>--> | ||||
| <!--            <artifactId>captcha-spring-boot-starter</artifactId>--> | ||||
| <!--            <version>1.2.7</version>--> | ||||
| <!--        </dependency>--> | ||||
|  | ||||
| <!--        滑块验证码--> | ||||
|         <dependency> | ||||
|             <groupId>com.github.anji-plus</groupId> | ||||
|             <artifactId>captcha-spring-boot-starter</artifactId> | ||||
|             <version>1.2.7</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- 验证码 --> | ||||
|         <dependency> | ||||
|   | ||||
| @@ -110,6 +110,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter | ||||
|                 .antMatchers("/swagger-ui.html").anonymous() | ||||
|                 .antMatchers("/swagger-resources/**").anonymous() | ||||
|                 .antMatchers("/webjars/**").anonymous() | ||||
|                 .antMatchers("/login", "/captcha/get", "/captcha/check").permitAll() | ||||
|                 .antMatchers("/*/api-docs").anonymous() | ||||
|                 .antMatchers("/druid/**").anonymous() | ||||
|                 // 除上面外的所有请求全部需要鉴权认证 | ||||
|   | ||||
| @@ -0,0 +1,53 @@ | ||||
| package com.ruoyi.framework.web.service; | ||||
|  | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.redis.core.StringRedisTemplate; | ||||
| import com.anji.captcha.service.CaptchaCacheService; | ||||
|  | ||||
| /** | ||||
|  * 自定义redis验证码缓存实现类 | ||||
|  * | ||||
|  * @author ruoyi | ||||
|  */ | ||||
| public class CaptchaRedisService implements CaptchaCacheService | ||||
| { | ||||
|     @Autowired | ||||
|     private StringRedisTemplate stringRedisTemplate; | ||||
|  | ||||
|     @Override | ||||
|     public void set(String key, String value, long expiresInSeconds) | ||||
|     { | ||||
|         stringRedisTemplate.opsForValue().set(key, value, expiresInSeconds, TimeUnit.SECONDS); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean exists(String key) | ||||
|     { | ||||
|         return stringRedisTemplate.hasKey(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void delete(String key) | ||||
|     { | ||||
|         stringRedisTemplate.delete(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String get(String key) | ||||
|     { | ||||
|         return stringRedisTemplate.opsForValue().get(key); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long increment(String key, long val) | ||||
|     { | ||||
|         return stringRedisTemplate.opsForValue().increment(key, val); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String type() | ||||
|     { | ||||
|         return "redis"; | ||||
|     } | ||||
| } | ||||
| @@ -2,27 +2,27 @@ package com.ruoyi.framework.web.service; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.annotation.Lazy; | ||||
| import org.springframework.security.authentication.AuthenticationManager; | ||||
| import org.springframework.security.authentication.BadCredentialsException; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.stereotype.Component; | ||||
| import com.anji.captcha.model.common.ResponseModel; | ||||
| import com.anji.captcha.model.vo.CaptchaVO; | ||||
| import com.anji.captcha.service.CaptchaService; | ||||
| import com.ruoyi.common.constant.Constants; | ||||
| import com.ruoyi.common.core.domain.entity.SysUser; | ||||
| import com.ruoyi.common.core.domain.model.LoginUser; | ||||
| import com.ruoyi.common.core.redis.RedisCache; | ||||
| import com.ruoyi.common.exception.ServiceException; | ||||
| import com.ruoyi.common.exception.user.CaptchaException; | ||||
| import com.ruoyi.common.exception.user.CaptchaExpireException; | ||||
| import com.ruoyi.common.exception.user.UserPasswordNotMatchException; | ||||
| import com.ruoyi.common.utils.DateUtils; | ||||
| import com.ruoyi.common.utils.MessageUtils; | ||||
| import com.ruoyi.common.utils.StringUtils; | ||||
| import com.ruoyi.common.utils.ServletUtils; | ||||
| import com.ruoyi.common.utils.ip.IpUtils; | ||||
| import com.ruoyi.framework.manager.AsyncManager; | ||||
| import com.ruoyi.framework.manager.factory.AsyncFactory; | ||||
| import com.ruoyi.system.service.ISysConfigService; | ||||
| import com.ruoyi.system.service.ISysUserService; | ||||
|  | ||||
| /** | ||||
| @@ -39,14 +39,12 @@ public class SysLoginService | ||||
|     @Resource | ||||
|     private AuthenticationManager authenticationManager; | ||||
|  | ||||
|     @Autowired | ||||
|     private RedisCache redisCache; | ||||
|  | ||||
|     @Autowired | ||||
|     private ISysUserService userService; | ||||
|  | ||||
|     @Autowired | ||||
|     private ISysConfigService configService; | ||||
|     @Lazy | ||||
|     private CaptchaService captchaService; | ||||
|  | ||||
|     /** | ||||
|      * 登录验证 | ||||
| @@ -54,16 +52,18 @@ public class SysLoginService | ||||
|      * @param username 用户名 | ||||
|      * @param password 密码 | ||||
|      * @param code 验证码 | ||||
|      * @param uuid 唯一标识 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public String login(String username, String password, String code, String uuid) | ||||
|     public String login(String username, String password, String code) | ||||
|     { | ||||
|         boolean captchaOnOff = configService.selectCaptchaOnOff(); | ||||
|         // 验证码开关 | ||||
|         if (captchaOnOff) | ||||
|         CaptchaVO captchaVO = new CaptchaVO(); | ||||
|         captchaVO.setCaptchaVerification(code); | ||||
|         ResponseModel response = captchaService.verification(captchaVO); | ||||
|         if (!response.isSuccess()) | ||||
|         { | ||||
|             validateCaptcha(username, code, uuid); | ||||
|             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, | ||||
|                     MessageUtils.message("user.jcaptcha.error"))); | ||||
|             throw new CaptchaException(); | ||||
|         } | ||||
|         // 用户验证 | ||||
|         Authentication authentication = null; | ||||
| @@ -88,36 +88,10 @@ public class SysLoginService | ||||
|         } | ||||
|         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         recordLoginInfo(loginUser.getUserId()); | ||||
|         // 生成token | ||||
|         return tokenService.createToken(loginUser); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验验证码 | ||||
|      * | ||||
|      * @param username 用户名 | ||||
|      * @param code 验证码 | ||||
|      * @param uuid 唯一标识 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public void validateCaptcha(String username, String code, String uuid) | ||||
|     { | ||||
|         String verifyKey = Constants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); | ||||
|         String captcha = redisCache.getCacheObject(verifyKey); | ||||
|         redisCache.deleteObject(verifyKey); | ||||
|         if (captcha == null) | ||||
|         { | ||||
|             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); | ||||
|             throw new CaptchaExpireException(); | ||||
|         } | ||||
|         if (!code.equalsIgnoreCase(captcha)) | ||||
|         { | ||||
|             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); | ||||
|             throw new CaptchaException(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 记录登录信息 | ||||
|      * | ||||
| @@ -131,4 +105,4 @@ public class SysLoginService | ||||
|         sysUser.setLoginDate(DateUtils.getNowDate()); | ||||
|         userService.updateUserProfile(sysUser); | ||||
|     } | ||||
| } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user