Shiro是一款开源的Java安全框架,可以为任何应用程序提供保护,并为其提供身份验证(authentication)、授权(authorization)、密码学(cryptography)、会话管理(session management)等功能。Shiro的主要目标是使安全容易使用。
一、Shiro是什么意思
Shiro这个词是日语,意思是“城”或“城市”,这个名字意味着Shiro的使命是保护应用程序和组织就像城墙保护城市一样。通过Shiro框架,开发人员可以轻松地为应用程序添加安全性,从而保护应用程序的数据和资源。
二、Shiraz是什么意思
与Shiro类似,Shiraz也是一个城市的名字,位于伊朗西南部。但是与Shiro无关。
三、Shiro是什么牌子
Shiro不是一家公司或品牌的名字,而是一个开源软件框架的名字,由Apache Software Foundation主持管理和开发。
四、Shire是什么
Shire通常指的是英国地名,但是在计算机领域,Shire可以指代Shiro的一个子项目,即Shiro-integration-test。这个子项目用于测试Shiro与各种Web框架的集成。
五、Shiro是什么技术
Shiro是一种Java安全框架,它不依赖于任何其他的框架或技术。它是一个独立的框架,可以与任何其他Java技术一起使用,例如Spring、Hibernate等。
六、Shirr是什么意思
Shirr这个词语指的是将面料或纸张纵向收拢起来,用于增强强度或形状的过程。但是与Shiro无关。
七、Shiro是什么设备
Shiro不是一种设备,而是一种软件框架。
八、Shiro框架是什么
Shiro框架是一个Java安全框架,用于保护企业级应用程序的安全。Shiro可以为应用程序提供身份验证、授权、密码学、会话管理等功能。它是一个易于使用的框架,可以轻松地与任何其他Java技术一起使用。
九、Shiro是什么意思中文
Shiro的中文意思是“城”或“城市”。正如其名所示,Shiro旨在为您的应用程序提供安全保护,就像城墙保护城市一样,它可以为您的应用程序提供保护,以避免被黑客攻击。
十、Shiro是什么牌子中文
Shiro不是一个商标或品牌名,而是一个开源软件框架的名字,由Apache主持管理和开发。
Shiro示例代码:
#pom.xml文件中添加shiro依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.7.0</version>
</dependency>
#创建.ini文件用于存储用户信息和角色信息
[users]
username=password,role1,role2
username2=password2,role2
[roles]
role1=permission1,permission2
role2=permission2,permission3
#创建Shiro配置类
public class ShiroConfiguration {
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(customRealm());
return securityManager;
}
@Bean
public CustomRealm customRealm() {
CustomRealm customRealm = new CustomRealm();
customRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return customRealm;
}
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher() {
HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
hashedCredentialsMatcher.setHashAlgorithmName("MD5");
hashedCredentialsMatcher.setHashIterations(2);
return hashedCredentialsMatcher;
}
}
#创建自定义Realm
public class CustomRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String username = (String) principals.getPrimaryPrincipal();
User user = userService.findByUsername(username);
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.setRoles(user.getRoles());
authorizationInfo.setStringPermissions(user.getPermissions());
return authorizationInfo;
}
//身份验证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
User user = userService.findByUsername(username);
if (user == null) {
throw new UnknownAccountException();
}
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
return authenticationInfo;
}
}
#创建自定义Filter
public class CustomRolesAuthorizationFilter extends AuthorizationFilter {
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
Subject subject = getSubject(request, response);
String[] rolesArray = (String[]) mappedValue;
if (rolesArray == null || rolesArray.length == 0) {
return true;
}
for (String roleName : rolesArray) {
if (subject.hasRole(roleName)) {
return true;
}
}
return false;
}
}
#配置自定义Filter
public class ShiroFilterConfiguration {
@Bean
public FilterRegistrationBean registration(CustomRolesAuthorizationFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/admin/**", "roles[admin]");
filterChainDefinitionMap.put("/guest/**", "roles[guest]");
filterChainDefinitionMap.put("/user/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
Map<String,Filter> filters = new HashMap<>();
filters.put("roles", new CustomRolesAuthorizationFilter());
shiroFilterFactoryBean.setFilters(filters);
return shiroFilterFactoryBean;
}
}
#创建用户Service
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User findByUsername(String username) {
return userDao.findByUsername(username);
}
}
#创建UserDao
@Repository
public class UserDao {
private Map<String,String> userMap = new HashMap<>();
{
userMap.put("admin", "e10adc3949ba59abbe56e057f20f883e");
userMap.put("guest", "e10adc3949ba59abbe56e057f20f883e");
}
public User findByUsername(String username) {
String password = userMap.get(username);
if (password == null) {
return null;
}
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setRoles(new HashSet<>(Arrays.asList("admin", "guest"))));
user.setPermissions(new HashSet<>(Arrays.asList("permission1", "permission2", "permission3"))));
return user;
}
}
#创建User类
public class User {
private String username;
private String password;
private Set<String> roles;
private Set<String> permissions;
//getter和setter方法省略
}
#在Controller中使用Shiro注解
@Controller
@RequestMapping("/user")
public class UserController {
@RequiresRoles("admin")
@RequestMapping("/admin")
public String admin() {
return "admin";
}
@RequiresRoles("guest")
@RequestMapping("/guest")
public String guest() {
return "guest";
}
@RequestMapping("/login")
public String login() {
return "login";
}
}
原创文章,作者:OONNZ,如若转载,请注明出处:https://www.506064.com/n/361251.html
微信扫一扫
支付宝扫一扫