Java涓璼hiro妗嗘灦鎬庝箞璋冪敤
鍦↗ava涓娇鐢⊿hiro妗嗘灦锛屽彲浠ユ寜鐓т互涓嬫楠よ繘琛岃皟鐢細
- 娣诲姞Shiro渚濊禆锛氬湪椤圭洰鐨刾om.xml鏂囦欢涓坊鍔燬hiro鐩稿叧鐨勪緷璧栵紝渚嬪锛?/li>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.7.1</version>
</dependency>
- 閰嶇疆Shiro锛氬垱寤轰竴涓猄hiro閰嶇疆绫伙紝鐢ㄤ簬閰嶇疆Shiro鐨勭浉鍏冲弬鏁帮紝渚嬪锛?/li>
@Configuration
public class ShiroConfig {
@Bean
public Realm realm() {
return new MyRealm();
}
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
filterFactoryBean.setSecurityManager(securityManager());
filterFactoryBean.setLoginUrl("/login");
filterFactoryBean.setUnauthorizedUrl("/unauthorized");
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc");
filterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return filterFactoryBean;
}
@Bean
public DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm());
return securityManager;
}
}
- 鍒涘缓鑷畾涔夌殑Realm锛氬疄鐜癝hiro鐨凴ealm鎺ュ彛锛岀敤浜庡畾涔夌敤鎴风殑韬唤璁よ瘉鍜屾潈闄愭巿鏉冮€昏緫锛屼緥濡傦細
public class MyRealm implements Realm {
@Override
public String getName() {
return "myRealm";
}
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof UsernamePasswordToken;
}
@Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
// 鏍规嵁鐢ㄦ埛鍚嶅拰瀵嗙爜杩涜韬唤璁よ瘉閫昏緫
return new SimpleAuthenticationInfo(username, password, getName());
}
@Override
public AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) {
String username = (String) principals.getPrimaryPrincipal();
// 鏍规嵁鐢ㄦ埛鍚嶈繘琛屾潈闄愭巿鏉冮€昏緫
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.addRole("admin");
authorizationInfo.addStringPermission("user:read");
return authorizationInfo;
}
}
- 浣跨敤Shiro锛氬湪闇€瑕佷娇鐢⊿hiro杩涜韬唤璁よ瘉鍜屾潈闄愭巿鏉冪殑鍦版柟锛岄€氳繃SecurityUtils鑾峰彇Subject瀵硅薄锛岀劧鍚庤皟鐢ㄥ叾鐩稿簲鐨勬柟娉曪紝渚嬪锛?/li>
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
if (subject.isAuthenticated()) {
// 韬唤璁よ瘉鎴愬姛鐨勯€昏緫
} else {
// 韬唤璁よ瘉澶辫触鐨勯€昏緫
}
if (subject.hasRole("admin")) {
// 鎷ユ湁admin瑙掕壊鐨勯€昏緫
}
if (subject.isPermitted("user:read")) {
// 鎷ユ湁user:read鏉冮檺鐨勯€昏緫
}
浠ヤ笂鏄娇鐢⊿hiro妗嗘灦鐨勫熀鏈皟鐢ㄦ柟娉曪紝鍏蜂綋鏍规嵁闇€姹傚彲浠ヨ繘琛屾洿璇︾粏鐨勯厤缃拰浣跨敤銆?/p>
相关问答