Browse Source

app登录方法

bihuisong 8 months ago
parent
commit
f32e58e0d7

+ 15 - 0
zhjq-admin/src/main/java/com/zhjq/web/controller/system/SysLoginController.java

@@ -90,4 +90,19 @@ public class SysLoginController {
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return AjaxResult.success(menuService.buildMenus(menus));
     }
+
+    /**
+     * app登录方法
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/appLogin")
+    public AjaxResult appLogin(@RequestBody LoginBody loginBody) {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.appLogin(loginBody.getUsername(), loginBody.getPassword());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
 }

+ 1 - 1
zhjq-framework/src/main/java/com/zhjq/framework/config/SecurityConfig.java

@@ -108,7 +108,7 @@ public class SecurityConfig {
                 .authorizeHttpRequests((requests) -> {
                     permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                     // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                    requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
+                    requests.antMatchers("/login", "/register", "/captchaImage", "/appLogin").permitAll()
                             // 静态资源,可匿名访问
                             .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                             .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/weather/**").permitAll()

+ 36 - 0
zhjq-framework/src/main/java/com/zhjq/framework/web/service/SysLoginService.java

@@ -156,4 +156,40 @@ public class SysLoginService {
         sysUser.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(sysUser);
     }
+
+
+    /**
+     * app登录验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @return 结果
+     */
+    public String appLogin(String username, String password) {
+        // 登录前置校验
+        loginPreCheck(username, password);
+        // 用户验证
+        Authentication authentication = null;
+        try {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        } finally {
+            AuthenticationContextHolder.clearContext();
+        }
+        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);
+    }
 }

+ 6 - 6
zhjq-ui/src/views/system/voice/index.vue

@@ -128,15 +128,10 @@
               <el-input v-model="form.author" placeholder="请输入作者"/>
             </el-form-item>
           </el-col>
-          <el-col :span="24">
-            <el-form-item label="语音文件" prop="voiceUrl">
-              <voice-upload v-model="form.voiceUrl"/>
-            </el-form-item>
-          </el-col>
           <el-col :span="12">
             <el-form-item label="发布时间" prop="releaseTime">
               <el-date-picker
-                style="width: 400px"
+                style="width: 380px"
                 v-model="form.releaseTime"
                 type="date"
                 placeholder="请选择发布时间">
@@ -149,6 +144,11 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
+            <el-form-item label="语音文件" prop="voiceUrl">
+              <voice-upload v-model="form.voiceUrl"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
             <el-form-item label="内容" prop="content">
               <editor style="height: 280px" label="富文本控件" v-model="form.content"/>
             </el-form-item>