您的位置:

Shiro是什么?

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