| dao/src/main/java/com/sandu/ximon/dao/enums/AdministratorEnums.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/dto/CustomerJwtUser.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/security/PermissionConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminDetailsServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ximon-admin/src/main/java/com/sandu/ximon/admin/service/CustomerDetailsServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
dao/src/main/java/com/sandu/ximon/dao/enums/AdministratorEnums.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.sandu.ximon.dao.enums; /** * 管çåç±»å * * @author chenjiantian */ public enum AdministratorEnums { /** * 管çå */ ADMIN(0), /** * å®¢æ· */ CUSTOMER(1), /** * 管çåè´¦å·è¿å ¥å®¢æ· */ INSPECT_CUSTOMER(2), ; private final Integer code; AdministratorEnums(Integer code) { this.code = code; } public Integer getCode() { return code; } } ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
@@ -1,6 +1,7 @@ package com.sandu.ximon.admin.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapBuilder; import cn.hutool.core.map.MapUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -22,6 +23,7 @@ import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Menu; import com.sandu.ximon.dao.domain.Role; import com.sandu.ximon.dao.enums.AdministratorEnums; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -68,7 +70,10 @@ return ResponseUtil.error(ResponseStatusEnums.BAD_CREDENTIALS.getCode(), ResponseStatusEnums.BAD_CREDENTIALS.getMessage()); } UserDetails userJwtUser = new AdminJwtUser(admin, roleService.mapToGrantedAuthorities(admin.getId())); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userJwtUser, admin.getId(), userJwtUser.getAuthorities()); if(!userJwtUser.isEnabled()){ return ResponseUtil.error(ResponseStatusEnums.DISABLE_ACCOUNT.getCode(), ResponseStatusEnums.DISABLE_ACCOUNT.getMessage()); } UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userJwtUser, AdministratorEnums.ADMIN.getCode(), userJwtUser.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); @@ -96,13 +101,17 @@ @GetMapping(value = "/info") public ResponseVO<Object> getUserInfo() { Integer administratorIdentity = SecurityUtils.getAdministratorIdentity(); Long userId = SecurityUtils.getUserId(); Admin admin = adminService.getById(userId); List<Role> roles = roleService.listByAdminId(admin.getId()); List<Menu> menus = menuService.listByRoleIds(roles.stream().map(Role::getId).collect(Collectors.toList())); MapBuilder<Object, Object> builder = MapUtil.builder().put("info", admin); if(CollectionUtil.isNotEmpty(menus)){ List<Menu> collect = menus.stream().filter(menu -> menu.getType() == 0).collect(Collectors.toList()); Map<Object, Object> build = MapUtil.builder().put("info", admin).put("menus", collect).build(); return ResponseUtil.success(build); builder.put("menus", collect); } return ResponseUtil.success(builder.build()); } @GetMapping(value = "/list") ximon-admin/src/main/java/com/sandu/ximon/admin/dto/CustomerJwtUser.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ package com.sandu.ximon.admin.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.sandu.common.enums.AdminStatusStatus; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Client; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; import java.util.stream.Collectors; /** * @author chenjiantian * @date 2021/4/23 17:45 */ @Getter public class CustomerJwtUser implements UserDetails { private final Client user; @JsonIgnore private final Collection<GrantedAuthority> authorities; public CustomerJwtUser(Client admin, Collection<GrantedAuthority> authorities) { this.user = admin; this.authorities = authorities; } public Collection<String> getRoles() { return authorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.toSet()); } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @JsonIgnore @Override public String getPassword() { return user.getMobile(); } @Override public String getUsername() { return user.getMobile(); } @JsonIgnore @Override public boolean isAccountNonExpired() { return true; } @JsonIgnore @Override public boolean isAccountNonLocked() { return true; } @JsonIgnore @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { // return AdminStatusStatus.NORMAL.getCode().equals(user.getStatus()); return true; } } ximon-admin/src/main/java/com/sandu/ximon/admin/security/PermissionConfig.java
@@ -15,11 +15,11 @@ @Service(value = "p") public class PermissionConfig { public Boolean check(String... permissions) { // è·åå½åç¨æ·çæææé List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); // 夿å½åç¨æ·çæææéæ¯å¦å 嫿¥å£ä¸å®ä¹çæé return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains); } // public Boolean check(String... permissions) { // // // è·åå½åç¨æ·çæææé // List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); // // 夿å½åç¨æ·çæææéæ¯å¦å 嫿¥å£ä¸å®ä¹çæé // return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains); // } } ximon-admin/src/main/java/com/sandu/ximon/admin/security/SecurityUtils.java
@@ -15,8 +15,7 @@ import com.sandu.common.security.jwt.JwtTokenProvider; import com.sandu.common.util.RequestHolder; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.dto.AdminJwtUser; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.enums.AdministratorEnums; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; @@ -32,19 +31,26 @@ */ public class SecurityUtils { public static UserDetails getUserDetails() { /** * è·åç¨æ·ä¿¡æ¯ */ private static UserDetails getUserDetails() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()); } if (authentication.getPrincipal() instanceof UserDetails) { Integer administratorIdentity = getAdministratorIdentity(); if (AdministratorEnums.ADMIN.getCode().equals(administratorIdentity) || AdministratorEnums.INSPECT_CUSTOMER.getCode().equals(administratorIdentity)) { UserDetails userDetails = (UserDetails) authentication.getPrincipal(); UserDetailsService userDetailsService = SpringContextHolder.getBean(UserDetailsService.class); UserDetailsService userDetailsService = SpringContextHolder.getBean("adminDetailsService"); return userDetailsService.loadUserByUsername(userDetails.getUsername()); } else if (AdministratorEnums.CUSTOMER.getCode().equals(administratorIdentity)) { UserDetails userDetails = (UserDetails) authentication.getPrincipal(); UserDetailsService userDetailsService = SpringContextHolder.getBean("customerDetailsService"); return userDetailsService.loadUserByUsername(userDetails.getUsername()); } return null; // throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()); } /** @@ -62,6 +68,19 @@ } /** * è·å管çåèº«ä»½ï¼ ç±»åå¯è§ {{@link AdministratorEnums}} * * @return */ public static Integer getAdministratorIdentity() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()); } return (Integer) authentication.getCredentials(); } /** * è·åç³»ç»ç¨æ·id * * @return ç³»ç»ç¨æ·id ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminDetailsServiceImpl.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/service/UserDetailsServiceImpl.java ÐÞ¸Ä @@ -2,6 +2,7 @@ import com.sandu.ximon.admin.dto.AdminJwtUser; import com.sandu.ximon.dao.domain.Admin; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; @@ -11,20 +12,22 @@ * @author hupeng * @date 2018-11-22 */ @Service("userDetailsService") public class UserDetailsServiceImpl implements UserDetailsService { @Slf4j @Service("adminDetailsService") public class AdminDetailsServiceImpl implements UserDetailsService { private final AdminService adminService; private final RoleService roleService; public UserDetailsServiceImpl(AdminService userService, RoleService roleService) { public AdminDetailsServiceImpl(AdminService userService, RoleService roleService) { this.adminService = userService; this.roleService = roleService; } @Override public UserDetails loadUserByUsername(String username) { log.info("loadUserByUsername == {}",username); Admin admin = adminService.findByUserName(username); if (admin == null) { throw new IllegalArgumentException("è´¦å·ä¸åå¨"); ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
@@ -4,6 +4,7 @@ import com.sandu.common.execption.BusinessException; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.param.ClientPrarm; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Client; import com.sandu.ximon.dao.mapper.ClientMapper; import lombok.AllArgsConstructor; @@ -49,4 +50,7 @@ return removeById(id); } public Client findByPhone(String phone) { return getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getMobile, phone).last("limit 1")); } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/CustomerDetailsServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; import com.sandu.ximon.admin.dto.AdminJwtUser; import com.sandu.ximon.admin.dto.CustomerJwtUser; import com.sandu.ximon.dao.domain.Client; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; import java.util.stream.Collectors; /** * @author hupeng * @date 2018-11-22 */ @Slf4j @Service("customerDetailsService") public class CustomerDetailsServiceImpl implements UserDetailsService { private final ClientService adminService; public CustomerDetailsServiceImpl(ClientService userService) { this.adminService = userService; } @Override public UserDetails loadUserByUsername(String username) { log.info("loadUserByUsername CustomerDetailsServiceImpl == {}",username); Client admin = adminService.findByPhone(username); if (admin == null) { throw new IllegalArgumentException("è´¦å·ä¸åå¨"); } else { return createJwtUser(admin); } } private UserDetails createJwtUser(Client admin) { return new CustomerJwtUser( admin, CollectionUtil.newHashSet("c").stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList()) ); } }