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"; } }