zhijiezhao vor 2 Jahren
Ursprung
Commit
f2b518e184

+ 3 - 2
src/main/java/com/caimei365/manager/config/security/AuthenticationEntryPointImpl.java

@@ -20,10 +20,11 @@ import java.util.Map;
 @Slf4j
 public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
 
-    public AuthenticationEntryPointImpl() {}
+    public AuthenticationEntryPointImpl() {
+    }
 
     /**
-     * @param request 遇到了认证异常authException用户请求
+     * @param request  遇到了认证异常authException用户请求
      * @param response 将要返回给客户的相应
      */
     @Override

+ 2 - 1
src/main/java/com/caimei365/manager/config/security/AuthenticationProviderImpl.java

@@ -22,7 +22,7 @@ public class AuthenticationProviderImpl implements AuthenticationProvider {
     private final UserDetailsService userDetailsService;
     private final BCryptPasswordEncoder bCryptPasswordEncoder;
 
-    public AuthenticationProviderImpl(UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder){
+    public AuthenticationProviderImpl(UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder) {
         this.userDetailsService = userDetailsService;
         this.bCryptPasswordEncoder = bCryptPasswordEncoder;
     }
@@ -52,6 +52,7 @@ public class AuthenticationProviderImpl implements AuthenticationProvider {
 
     /**
      * 判断当前的AuthenticationProvider 是否支持对应的Authentication对象
+     *
      * @param authentication Authentication对象
      * @return boolean
      */

+ 3 - 0
src/main/java/com/caimei365/manager/config/security/GlobalCorsFilter.java

@@ -11,9 +11,11 @@ import java.io.IOException;
  * @date : 2021/12/14
  */
 public class GlobalCorsFilter implements Filter {
+
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
     }
+
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         HttpServletResponse res = (HttpServletResponse) response;
@@ -23,6 +25,7 @@ public class GlobalCorsFilter implements Filter {
         res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, x-requested-with, Cache-Control, X-Token");
         chain.doFilter(request, res);
     }
+
     @Override
     public void destroy() {
     }

+ 2 - 1
src/main/java/com/caimei365/manager/config/security/JwtAuthenticationFilter.java

@@ -16,7 +16,7 @@ import java.util.ArrayList;
 
 /**
  * 自定义JWT认证过滤器
- *
+ * <p>
  * 该类继承自BasicAuthenticationFilter,在doFilterInternal方法中,
  * 从http头的Authorization 项读取token数据,然后用Jwts包提供的方法校验token的合法性。
  * 如果校验通过,就认为这是一个取得授权的合法请求
@@ -28,6 +28,7 @@ import java.util.ArrayList;
 public class JwtAuthenticationFilter extends BasicAuthenticationFilter {
 
     private final JwtService jwtService;
+
     public JwtAuthenticationFilter(AuthenticationManager authenticationManager, JwtService jwtService) {
         super(authenticationManager);
         this.jwtService = jwtService;

+ 8 - 7
src/main/java/com/caimei365/manager/config/security/JwtLoginFilter.java

@@ -20,12 +20,12 @@ import java.util.*;
 
 /**
  * 自定义JWT登录过滤器
- *
+ * <p>
  * 验证用户名密码正确后,生成一个token,并将token返回给客户端
  * 该类继承自UsernamePasswordAuthenticationFilter,重写了其中的3个方法
- *     attemptAuthentication:接收并解析用户凭证。
- *     successfulAuthentication:用户成功登录后被调用,我们在这个方法里生成token。
- *     unsuccessfulAuthentication:认证失败后被调用
+ * attemptAuthentication:接收并解析用户凭证。
+ * successfulAuthentication:用户成功登录后被调用,我们在这个方法里生成token。
+ * unsuccessfulAuthentication:认证失败后被调用
  *
  * @author : Charles
  * @date : 2021/12/2
@@ -35,6 +35,7 @@ public class JwtLoginFilter extends UsernamePasswordAuthenticationFilter {
 
     private final AuthenticationManager authenticationManager;
     private final JwtService jwtService;
+
     public JwtLoginFilter(AuthenticationManager authenticationManager, JwtService jwtService) {
         this.authenticationManager = authenticationManager;
         this.jwtService = jwtService;
@@ -76,9 +77,9 @@ public class JwtLoginFilter extends UsernamePasswordAuthenticationFilter {
             response.addHeader("X-Token", token);
             // 设置用户信息及token到body里面
             Map<String, Object> resultMap = new HashMap();
-            resultMap.put("username",auth.getName());
-            resultMap.put("token",token);
-            resultMap.put("roles",roleList);
+            resultMap.put("username", auth.getName());
+            resultMap.put("token", token);
+            resultMap.put("roles", roleList);
             ResponseJson<Map<String, Object>> resultJson = ResponseJson.success("登录成功", resultMap);
             response.setCharacterEncoding("UTF-8");
             response.getWriter().write(JSON.toJSONString(resultJson));

+ 6 - 3
src/main/java/com/caimei365/manager/config/security/JwtService.java

@@ -23,8 +23,10 @@ import java.util.List;
 public class JwtService {
     @Resource
     private RedisService redisService;
+
     /**
      * 生成token
+     *
      * @param username 用户名
      * @param roleList 角色列表
      */
@@ -94,7 +96,7 @@ public class JwtService {
     /**
      * 解析Token,取出用户名(Token过期仍取出用户名)
      */
-    public String getUsername(String token){
+    public String getUsername(String token) {
         String username = null;
         if (StringUtils.hasLength(token)) {
             String userinfo = null;
@@ -110,8 +112,9 @@ public class JwtService {
                 Claims claims = e.getClaims();
                 // 取出用户信息
                 userinfo = claims.getSubject();
-            } catch (Exception ignored){}
-            if (StringUtils.hasLength(userinfo)){
+            } catch (Exception ignored) {
+            }
+            if (StringUtils.hasLength(userinfo)) {
                 username = userinfo.split("-")[0];
             }
         }

+ 17 - 17
src/main/java/com/caimei365/manager/config/security/SecurityConfig.java

@@ -62,22 +62,22 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
     @Override
     protected void configure(HttpSecurity http) throws Exception {
         http
-            // 关闭Session
-            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
-            // 所有请求需要身份认证
-            .and().authorizeRequests().anyRequest().authenticated()
-            .and()
-            // 自定义JWT登录过滤器
-            .addFilter(new JwtLoginFilter(authenticationManager(), jwtService))
-            // 自定义JWT认证过滤器
-            .addFilter(new JwtAuthenticationFilter(authenticationManager(), jwtService))
-            // 自定义认证拦截器,也可以直接使用内置实现类Http403ForbiddenEntryPoint
-            .exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPointImpl())
-            // 允许跨域
-            .and().cors()
-            // 保证跨域过滤器首先触发
-            .and().addFilterBefore(new GlobalCorsFilter(), ChannelProcessingFilter.class)
-            // 禁用跨站伪造
-            .csrf().disable();
+                // 关闭Session
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+                // 所有请求需要身份认证
+                .and().authorizeRequests().anyRequest().authenticated()
+                .and()
+                // 自定义JWT登录过滤器
+                .addFilter(new JwtLoginFilter(authenticationManager(), jwtService))
+                // 自定义JWT认证过滤器
+                .addFilter(new JwtAuthenticationFilter(authenticationManager(), jwtService))
+                // 自定义认证拦截器,也可以直接使用内置实现类Http403ForbiddenEntryPoint
+                .exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPointImpl())
+                // 允许跨域
+                .and().cors()
+                // 保证跨域过滤器首先触发
+                .and().addFilterBefore(new GlobalCorsFilter(), ChannelProcessingFilter.class)
+                // 禁用跨站伪造
+                .csrf().disable();
     }
 }

+ 4 - 3
src/main/java/com/caimei365/manager/config/security/UserDetailsServiceImpl.java

@@ -24,10 +24,11 @@ import java.util.List;
 public class UserDetailsServiceImpl implements UserDetailsService {
     @Resource
     private SystemDao systemDao;
+
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
         SysUser user = systemDao.findByUsername(username);
-        if(user == null){
+        if (user == null) {
             throw new UsernameNotFoundException("用户" + username + "不存在!");
         }
         // 获取用户角色列表
@@ -35,8 +36,8 @@ public class UserDetailsServiceImpl implements UserDetailsService {
         // 设置权限和角色
         ArrayList<GrantedAuthority> authorities = new ArrayList<>();
         for (String role : roleNames) {
-            if (StringUtils.hasLength(role)){
-                authorities.add( new GrantedAuthorityImpl(role));
+            if (StringUtils.hasLength(role)) {
+                authorities.add(new GrantedAuthorityImpl(role));
             }
         }
         return new User(user.getUsername(), user.getPassword(), authorities);

+ 39 - 0
src/main/java/com/caimei365/manager/dao/SystemDao.java

@@ -19,15 +19,19 @@ public interface SystemDao {
      * 根据用户名称查找可登录用户
      */
     SysUser findByUsername(String username);
+
     Integer getUserIdByUsername(String username);
+
     /**
      * 新增用户角色关系表
      */
     void insertUserRoleRelation(Integer userId, Integer roleId);
+
     /**
      * 获取用户角色名称列表
      */
     List<String> getRoleNamesByUserId(Integer userId);
+
     /**
      * 获取用户角色Id列表
      */
@@ -36,14 +40,17 @@ public interface SystemDao {
 //     * 获取用户角色Id列表
 //     */
 //    List<Integer> getRoleIdsByUsername(String username);
+
     /**
      * 删除用户原有角色关联
      */
     void deleteUserRoleRelation(Integer userId);
+
     /**
      * 根据角色Ids获取菜单列表
      */
     List<SysMenu> getMenusByRoleIds(@Param("roleIds") List<Integer> roleIds);
+
     /**
      * 根据角色Id获取按钮权限列表
      */
@@ -53,18 +60,22 @@ public interface SystemDao {
      * 获取用户列表
      */
     List<SysUser> getUserList(String username, String fullName);
+
     /**
      * 根据ID获取用户
      */
     SysUser getUser(Integer id);
+
     /**
      * 新增系统用户
      */
     void insertSysUser(SysUser sysUser);
+
     /**
      * 根据ID更新用户
      */
     void updateSysUser(SysUser sysUser);
+
     /**
      * 根据ID删除用户
      */
@@ -74,50 +85,62 @@ public interface SystemDao {
      * 根据用户Id获取用户角色列表
      */
     List<SysRole> getRoleListByUserId(Integer userId);
+
     /**
      * 获取角色列表
      */
     List<SysRole> getRoleList();
+
     /**
      * 根据ID获取角色
      */
     SysRole getRole(Integer id);
+
     /**
      * 根据角色名称获取角色
      */
     SysRole getRoleByRoleName(String roleName);
+
     /**
      * 根据ID更新角色
      */
     void updateRole(SysRole sysRole);
+
     /**
      * 添加角色
      */
     void insertRole(SysRole sysRole);
+
     /**
      * 根据ID删除角色
      */
     void deleteRole(Integer id);
+
     /**
      * 根据角色ID获取菜单Ids
      */
     List<Integer> getMenuIdsByRoleId(Integer roleId);
+
     /**
      * 根据角色ID获取(权限-菜单)Ids
      */
     List<String> getPermissionMenuIdsByRoleId(Integer roleId);
+
     /**
      * 保存角色菜单关系
      */
     void insertRoleMenuRelation(Integer roleId, Integer menuId);
+
     /**
      * 保存角色权限关系
      */
     void insertRolePermissionRelation(Integer roleId, Integer permissionId);
+
     /**
      * 删除原有角色菜单关联
      */
     void deleteRoleMenuRelation(Integer roleId);
+
     /**
      * 删除原有角色权限关联
      */
@@ -125,57 +148,73 @@ public interface SystemDao {
 
     /**
      * 获取菜单列表
+     *
      * @param parentId 父级菜单Id
      * @param status   状态:0启用,1停用
      */
     List<SysMenu> getMenuList(Integer parentId, Integer status);
+
     /**
      * 获取树状菜单列表
+     *
      * @param parentId 父级菜单Id
      */
     List<SysMenuTree> getMenuTree(String parentId);
+
     /**
      * 获取当前菜单的按钮权限
+     *
      * @param menuId 菜单Id
      */
     List<SysMenuTree> getTreePermissions(String menuId);
+
     /**
      * 根据ID获取菜单
      */
     SysMenu getMenu(Integer id);
+
     /**
      * 根据路由名称查询菜单
      */
     SysMenu getMenuByName(String name);
+
     /**
      * 根据ID更新菜单
      */
     void updateMenu(SysMenu menu);
+
     /**
      * 根据ID删除菜单
      */
     void deleteMenu(Integer id);
+
     /**
      * 添加菜单
      */
     void insertMenu(SysMenu menu);
+
     /**
      * 获取菜单的按钮权限列表
+     *
      * @param menuId 菜单Id
      */
     List<SysPermission> getPermissionList(Integer menuId);
+
     /**
      * 根据菜单Id获取权限ids
      */
     List<Integer> getPermissionIds(Integer menuId);
+
     /**
      * 权限ID更新权限
      */
     void updatePermission(SysPermission permission);
+
     /**
      * 权限ID删除权限
      */
     void deletePermission(Integer id);
+
     /**
      * 添加按钮权限
      */