mirror of https://github.com/elunez/eladmin
springsecurity的验证功能
parent
cb63b30f37
commit
fa1d4f6f06
|
@ -5,6 +5,8 @@ import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +18,23 @@ public class ElPermissionConfig {
|
||||||
public Boolean check(String ...permissions){
|
public Boolean check(String ...permissions){
|
||||||
// 获取当前用户的所有权限
|
// 获取当前用户的所有权限
|
||||||
List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
|
List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
|
||||||
|
//List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map((Function<GrantedAuthority, String>) GrantedAuthority::getAuthority).collect(Collectors.toList());
|
||||||
|
// List<String> elPermissions = SecurityUtils.getUserDetails().getAuthorities().stream().map(new Function<GrantedAuthority,String>() {
|
||||||
|
// @Override
|
||||||
|
// public String apply(GrantedAuthority o) {
|
||||||
|
// return o.getAuthority();
|
||||||
|
// }
|
||||||
|
// }).collect(Collectors.toList());
|
||||||
|
//简化为map((Function<GrantedAuthority, String>) o -> o.getAuthority()),然后简化为(Function<GrantedAuthority, String>) GrantedAuthority::getAuthority
|
||||||
// 判断当前用户的所有权限是否包含接口上定义的权限
|
// 判断当前用户的所有权限是否包含接口上定义的权限
|
||||||
return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains);
|
return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains);
|
||||||
|
// return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch( new Predicate<String>(){
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public boolean test(String o) {
|
||||||
|
// return elPermissions.contains(o);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
//简化为anyMatch(o -> elPermissions.contains(o)) 然后再次简化为elPermissions::contains
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import static org.springframework.http.HttpStatus.*;
|
||||||
/**
|
/**
|
||||||
* @author Zheng Jie
|
* @author Zheng Jie
|
||||||
* @date 2018-11-23
|
* @date 2018-11-23
|
||||||
|
* RestControllerAdvice作用于所有的Controller上
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestControllerAdvice
|
@RestControllerAdvice
|
||||||
|
|
|
@ -15,7 +15,13 @@ import java.util.*;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@SuppressWarnings({"unchecked","all"})
|
@SuppressWarnings({"unchecked","all"})
|
||||||
public class QueryHelp {
|
public class QueryHelp {
|
||||||
|
/**
|
||||||
|
* <R, Q> Predicate getPredicate(R root, Q query)为泛型方法,
|
||||||
|
* QueryHelp<T>为泛型类
|
||||||
|
* Predicate为数据库的查询条件映射的Java代码的查询条件,CriteriaBuilder可以创建基于Java代码的库表的查询条件
|
||||||
|
* CriteriaQuery指定要查询的表
|
||||||
|
* Q:泛型,表示系统中所有的条件查询的条件,有很多xxxxCriteria,如:MenuQueryCriteria
|
||||||
|
*/
|
||||||
public static <R, Q> Predicate getPredicate(Root<R> root, Q query, CriteriaBuilder cb) {
|
public static <R, Q> Predicate getPredicate(Root<R> root, Q query, CriteriaBuilder cb) {
|
||||||
List<Predicate> list = new ArrayList<>();
|
List<Predicate> list = new ArrayList<>();
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
* 3 T[] toArray(T[] a)最好加上泛型的参数,不然会返回Object[]数组,接收方处理起来麻烦
|
* 3 T[] toArray(T[] a)最好加上泛型的参数,不然会返回Object[]数组,接收方处理起来麻烦
|
||||||
*/
|
*/
|
||||||
.antMatchers(anonymousUrls.toArray(new String[0])).permitAll()
|
.antMatchers(anonymousUrls.toArray(new String[0])).permitAll()
|
||||||
// 所有请求都需要认证
|
/**
|
||||||
|
* 所有请求都需要认证
|
||||||
|
* anyRequest().authenticated():其他所有的请求都必须经过authenticated(验证)才能访问
|
||||||
|
* 也就是其他所有的请求都必须用户登录后才能访问,用户一登录就相当于已验证
|
||||||
|
*/
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
.and().apply(securityConfigurerAdapter());
|
.and().apply(securityConfigurerAdapter());
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,9 @@ public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFi
|
||||||
@Override
|
@Override
|
||||||
public void configure(HttpSecurity http) {
|
public void configure(HttpSecurity http) {
|
||||||
TokenFilter customFilter = new TokenFilter(tokenProvider);
|
TokenFilter customFilter = new TokenFilter(tokenProvider);
|
||||||
|
/**
|
||||||
|
* 在验证用户名和密码之前,添加一个自定义的filter,用来提供token的验证
|
||||||
|
*/
|
||||||
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
|
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,9 @@ public class MenuServiceImpl implements MenuService {
|
||||||
@Cacheable
|
@Cacheable
|
||||||
public List<MenuDto> queryAll(MenuQueryCriteria criteria){
|
public List<MenuDto> queryAll(MenuQueryCriteria criteria){
|
||||||
// Sort sort = new Sort(Sort.Direction.DESC,"id");
|
// Sort sort = new Sort(Sort.Direction.DESC,"id");
|
||||||
return menuMapper.toDto(menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
|
List<Menu> all = menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder));
|
||||||
|
List<MenuDto> menuDtos = menuMapper.toDto(all);
|
||||||
|
return menuDtos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue