0 부터 자신의 사 이 트 를 구축 합 니 다 28: springboot 은 shiro 권한 을 설정 하고 freemarker 에서 권한 통 제 를 합 니 다.
1. shiro 가방 도입
첫 번 째 는 shiro 의 핵심 가방 이 고, 두 번 째 는 freemarker 에서 shiro 라벨 을 사용 한 가방 입 니 다.
compile('org.apache.shiro:shiro-spring:1.3.2')
compile('net.mingsoft:shiro-freemarker-tags:0.1')
2. 사용자 정의 CustomRealm
public class CustomRealm extends AuthorizingRealm {
private static final Logger logger = LoggerFactory.getLogger(CustomRealm.class);
@Autowired
private UserService userService;
/**
*
* Shiro , Realm 、 。
*
* @param authenticationToken token
* @return AuthenticationInfo
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
logger.info("———— ————");
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
//
String password = userService.getPassword(token.getUsername());
if (null == password) {
throw new AccountException(" ");
} else if (!password.equals(new String((char[]) token.getCredentials()))) {
throw new AccountException(" ");
}
return new SimpleAuthenticationInfo(token.getPrincipal(), password, getName());
}
/**
*
*
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
logger.info("———— ————");
String username = (String) SecurityUtils.getSubject().getPrincipal();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//
String role = userService.getUserRole(username);
logger.info(username + " :" + role);
String[] split = role.split(",");
Set set = new HashSet<>();
for (String ro : split) {
// role Set info.setRoles()
set.add(ro);
}
//
info.setRoles(set);
return info;
}
}
/**
* freemarker Shiro
*/
@Component
public class ShiroTagFreeMarkerConfigurer implements InitializingBean {
@Autowired
private Configuration configuration;
@Autowired
private FreeMarkerViewResolver resolver;
@Override
public void afterPropertiesSet() throws Exception {
// , shiro
configuration.setSharedVariable("shiro", new ShiroTags());
// , ${context.contextPath} contextPath
resolver.setRequestContextAttribute("context");
}
}
/**
* shiro
* Created by 493858256qq.com on 2019/8/9.
*/
@Configuration
public class ShiroConfig {
private static final Logger logger = LoggerFactory.getLogger(ShiroConfig.class);
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// setLoginUrl , Web "/login.jsp" "/login"
shiroFilterFactoryBean.setLoginUrl("/login/login");
// url;
shiroFilterFactoryBean.setUnauthorizedUrl("/login/login");
//
Map filterChainDefinitionMap = new LinkedHashMap<>();
// ,
filterChainDefinitionMap.put("/guest/**", "anon");
// , “user”
// , “admin”
filterChainDefinitionMap.put("/manager/**", "roles[user]");
//
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
//
// , url
filterChainDefinitionMap.put("/**", "anon");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
logger.info("Shiro ");
return shiroFilterFactoryBean;
}
/**
* securityManager
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// realm.
securityManager.setRealm(customRealm());
return securityManager;
}
/**
* realm;
*
* , @Bean , CustomRealm,
* CustomRealm
*/
@Bean
public CustomRealm customRealm() {
return new CustomRealm();
}
}
3. html 에서 shiro 라벨 을 사용 하여 제어 메뉴 를 표시 합 니 다. 예 를 들 어 admin 역할 은 첫 페이지 를 표시 할 수 있 습 니 다.
첫 페이지
@shiro.hasRole>
개인 정보
전재 환영 합 니 다. 전재 출처 를 밝 혀 주세요. https://www.dingyinwu.com/article/74.html
글 에 문제 가 있 거나 개선 할 수 있 는 부분 이 있다 면 의견 을 많이 제시 해 주시 면 감사 하 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.