SpringSecurity + SpringBoot2.x +redis+多資料來源
阿新 • • 發佈:2021-01-07
1. 多資料來源配置(SQLServer,PostgreSQL)
2. 叢集session 配置 外部儲存(redis)
3.SpringSecurity 登入安全認證
4.SpringSecurity remembreMe 配置
5. SpringSecurity SessionManager 配置
6.增加了圖片驗證碼登入
7.動態許可權url 匹配認證
@Component @Order(Integer.MAX_VALUE) public class ThirdpartyAuthorizeConfigRole implements ThirdpartyAuthorizeConfigProvider { @Override public void config(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) { // config.antMatchers("/third/user").hasRole("Admin"); config.anyRequest().access("@rbacService.hasPermission(request,authentication)"); } }
package com.sy.thirdparty.authentication; import com.sy.thirdparty.config.SpringSecurityProperties; import com.sy.thirdparty.zcoas.SysUserEntity; import com.sy.thirdparty.zcoas.repository.SysUserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import org.springframework.util.AntPathMatcher; import javax.servlet.http.HttpServletRequest; import java.util.HashSet; import java.util.Set; /** * @Title: RbacServiceImpl * @ProjectName thirdparty * @date 2021-01-0711:34 */ @Component("rbacService") public class RbacServiceImpl implements RbacService { private AntPathMatcher antPathMatcher = new AntPathMatcher(); @Autowired private SysUserRepository sysUserRepository; @Autowired private SpringSecurityProperties springSecurityProperties; @Override public boolean hasPermission(HttpServletRequest request, Authentication authentication) { Object principal = authentication.getPrincipal(); boolean hasPermission = false; if (principal instanceof UserDetails) { String username = ((UserDetails) principal).getUsername(); SysUserEntity user = sysUserRepository.findByLoginName(username); if (user.getUserId() == springSecurityProperties.getAdminUserId()) return true; Set<String> urls = new HashSet<>(); for (String url : urls) { if (antPathMatcher.match(url, request.getRequestURI())) { hasPermission = true; break; } } } return hasPermission; } }
專案地址