diff --git a/backend/src/main/java/io/dataease/auth/api/AuthApi.java b/backend/src/main/java/io/dataease/auth/api/AuthApi.java index 7f2fe37636..12de6b0738 100644 --- a/backend/src/main/java/io/dataease/auth/api/AuthApi.java +++ b/backend/src/main/java/io/dataease/auth/api/AuthApi.java @@ -13,31 +13,27 @@ import org.springframework.web.bind.annotation.RequestMapping; import java.util.Map; - @Api(tags = "权限:权限管理") @ApiSupport(order = 10) @RequestMapping("/api/auth") public interface AuthApi { - @ApiOperation("登录") @PostMapping("/login") Object login(LoginDto loginDto) throws Exception; - @ApiOperation("获取用户信息") @PostMapping("/userInfo") CurrentUserDto userInfo(); - - - + @ApiOperation("是否使用初始密码") + @PostMapping("/useInitPwd") + Boolean useInitPwd(); @ApiOperation("登出") @PostMapping("/logout") String logout(); - @ApiOperation("验证账号") @PostMapping("/validateName") Boolean validateName(Map nameDto); @@ -46,7 +42,6 @@ public interface AuthApi { @PostMapping("/isOpenLdap") boolean isOpenLdap(); - @ApiOperation("是否开启oidc") @PostMapping("/isOpenOidc") boolean isOpenOidc(); diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index 6d03a46028..9f1332b8fa 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -27,6 +27,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -40,6 +41,9 @@ import javax.servlet.http.HttpServletRequest; @RestController public class AuthServer implements AuthApi { + @Value("${dataease.init_password:DataEase123..}") + private String DEFAULT_PWD; + @Autowired private AuthUserService authUserService; @@ -65,14 +69,19 @@ public class AuthServer implements AuthApi { SysUserEntity user = authUserService.getLdapUserByName(username); if (ObjectUtils.isEmpty(user) || ObjectUtils.isEmpty(user.getUserId())) { LdapAddRequest ldapAddRequest = new LdapAddRequest(); - ldapAddRequest.setUsers(new ArrayList() {{ - add(ldapUserEntity); - }}); + ldapAddRequest.setUsers(new ArrayList() { + { + add(ldapUserEntity); + } + }); ldapAddRequest.setEnabled(1L); - ldapAddRequest.setRoleIds(new ArrayList() {{ - add(2L); - }}); - sysUserService.validateExistUser(ldapUserEntity.getUsername(), ldapUserEntity.getNickname(), ldapUserEntity.getEmail()); + ldapAddRequest.setRoleIds(new ArrayList() { + { + add(2L); + } + }); + sysUserService.validateExistUser(ldapUserEntity.getUsername(), ldapUserEntity.getNickname(), + ldapUserEntity.getEmail()); sysUserService.saveLdapUsers(ldapAddRequest); } @@ -92,9 +101,9 @@ public class AuthServer implements AuthApi { // 普通登录需要验证密码 if (loginType == 0 || !isSupportLdap) { - //私钥解密 + // 私钥解密 - //md5加密 + // md5加密 pwd = CodingUtil.md5(pwd); if (!StringUtils.equals(pwd, realPwd)) { @@ -128,6 +137,16 @@ public class AuthServer implements AuthApi { return userDto; } + @Override + public Boolean useInitPwd() { + CurrentUserDto user = AuthUtils.getUser(); + if (null == user) { + return false; + } + String md5 = CodingUtil.md5(DEFAULT_PWD); + return StringUtils.equals(AuthUtils.getUser().getPassword(), md5); + } + @Override public String logout() { String token = ServletUtils.getToken(); @@ -158,7 +177,8 @@ public class AuthServer implements AuthApi { @Override public Boolean validateName(@RequestBody Map nameDto) { String userName = nameDto.get("userName"); - if (StringUtils.isEmpty(userName)) return false; + if (StringUtils.isEmpty(userName)) + return false; SysUserEntity userEntity = authUserService.getUserByName(userName); return !ObjectUtils.isEmpty(userEntity); } @@ -166,29 +186,30 @@ public class AuthServer implements AuthApi { @Override public boolean isOpenLdap() { Boolean licValid = PluginUtils.licValid(); - if (!licValid) return false; + if (!licValid) + return false; return authUserService.supportLdap(); } @Override public boolean isOpenOidc() { Boolean licValid = PluginUtils.licValid(); - if (!licValid) return false; + if (!licValid) + return false; return authUserService.supportOidc(); } @Override public boolean isPluginLoaded() { Boolean licValid = PluginUtils.licValid(); - if (!licValid) return false; + if (!licValid) + return false; return authUserService.pluginLoaded(); } - @Override public String getPublicKey() { return RsaProperties.publicKey; } - } diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js index 01850eecc5..c343c82030 100644 --- a/frontend/src/api/user.js +++ b/frontend/src/api/user.js @@ -22,6 +22,13 @@ export function logout() { }) } +export function needModifyPwd() { + return request({ + url: '/api/auth/useInitPwd', + method: 'post' + }) +} + export function validateUserName(data) { return request({ url: '/api/auth/validateName', diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 25101156d9..1ff806555e 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -131,6 +131,8 @@ export default { default_login: 'Normal' }, commons: { + first_login_tips: 'Please change the initial password', + roger_that: 'Roger That', apply: 'Apply', search: 'Search', folder: 'Folder', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index abe2e65799..efe5d8b4f8 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -131,6 +131,8 @@ export default { default_login: '普通登錄' }, commons: { + first_login_tips: '您使用的是初始密碼,記得修改密碼哦', + roger_that: '知道了', apply: '應用', search: '搜索', folder: '目錄', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 1445db33d2..7b3081d7f1 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -131,6 +131,8 @@ export default { default_login: '普通登录' }, commons: { + first_login_tips: '您使用的是初始密码,记得修改密码哦', + roger_that: '知道了', apply: '应用', search: '搜索', folder: '目录', diff --git a/frontend/src/layout/components/Topbar.vue b/frontend/src/layout/components/Topbar.vue index df3cc88933..d027ca3b99 100644 --- a/frontend/src/layout/components/Topbar.vue +++ b/frontend/src/layout/components/Topbar.vue @@ -14,10 +14,8 @@ > @@ -28,13 +26,22 @@ - + + diff --git a/frontend/src/layout/index.vue b/frontend/src/layout/index.vue index ed439d8f33..9accef3d11 100644 --- a/frontend/src/layout/index.vue +++ b/frontend/src/layout/index.vue @@ -1,7 +1,7 @@ @@ -23,6 +31,8 @@ import DeContainer from '@/components/dataease/DeContainer' import DeAsideContainer from '@/components/dataease/DeAsideContainer' import bus from '@/utils/bus' +import { needModifyPwd } from '@/api/user' + export default { name: 'Layout', components: { @@ -37,7 +47,9 @@ export default { mixins: [ResizeMixin], data() { return { - componentName: 'PanelMain' + componentName: 'PanelMain', + showTips: false, + finishLoad: false } }, computed: { @@ -76,6 +88,14 @@ export default { } } }, + beforeCreate() { + needModifyPwd().then(res => { + this.showTips = res.success && res.data + this.finishLoad = true + }).catch(e => { + this.finishLoad = true + }) + }, mounted() { bus.$on('PanelSwitchComponent', (c) => { this.componentName = c.name @@ -153,4 +173,28 @@ export default { } } + .pwd-tips { + position: absolute; + box-shadow: 0 0 0 1000em rgb(0, 0, 0, 0.3); + height: 100px; + width: 225px; + top: 105px; + right: 115px; + z-index: 9999; + border-radius: 4px; + padding: 15px; + } + .arrow{ + border-bottom: 7px solid #fff; + border-right: 7px solid #b5b5b7; + border-left: 7px solid #b5b5b7; + border-top: 7px solid #b5b5b7; + width: 0px; + height: 0px; + position: relative; + top:-60px; + left:210px; + transform: rotate(90deg); +} + diff --git a/frontend/src/views/system/user/form.vue b/frontend/src/views/system/user/form.vue index 7f68dd42b9..fbd22af234 100644 --- a/frontend/src/views/system/user/form.vue +++ b/frontend/src/views/system/user/form.vue @@ -13,12 +13,12 @@ - + @@ -40,9 +40,9 @@ :load-options="loadDepts" :auto-load-root-options="false" :placeholder="$t('user.choose_org')" - :noChildrenText="$t('commons.treeselect.no_children_text')" - :noOptionsText="$t('commons.treeselect.no_options_text')" - :noResultsText="$t('commons.treeselect.no_results_text')" + :no-children-text="$t('commons.treeselect.no_children_text')" + :no-options-text="$t('commons.treeselect.no_options_text')" + :no-results-text="$t('commons.treeselect.no_results_text')" @open="filterData" />