博客
关于我
最简单的springboot_shiro应用案例
阅读量:679 次
发布时间:2019-03-16

本文共 4360 字,大约阅读时间需要 14 分钟。

Shiro项目配置与代码示例

1. 引入依赖项

在项目中引入Shiro组件的依赖项。通过Maven进行配置:

org.apache.shiro
shiro-spring
1.4.1

2. 创建自定义的Realm类

创建一个继承自AuthorizingRealm的自定义Realm类,用于实现认证和授权功能。以下是一个示例代码:

public class CustomRealm extends AuthorizingRealm {    private final Map
userInfoMap; private final Map
> permissionMap; private final Map
> roleMap; { userInfoMap = new HashMap<>(); userInfoMap.put("jack", "123"); userInfoMap.put("baixun", "123"); permissionMap = new HashMap<>(); Set
set1 = new HashSet<>(); Set
set2 = new HashSet<>(); set1.add("video:find"); set1.add("video:buy"); set2.add("video:add"); set2.add("video:delete"); permissionMap.put("jack", set1); permissionMap.put("baixun", set2); roleMap = new HashMap<>(); Set
set1 = new HashSet<>(); Set
set2 = new HashSet<>(); set1.add("role1"); set1.add("role2"); set2.add("root"); roleMap.put("jack", set1); roleMap.put("baixun", set2); } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String name = (String) principals.getPrimaryPrincipal(); Set
permissions = getPermissionsByNameFromDB(name); Set
roles = getRolesByNameFromDB(name); SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); simpleAuthorizationInfo.setRoles(roles); simpleAuthorizationInfo.setStringPermissions(permissions); return simpleAuthorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String name = (String) token.getPrincipal(); String pwd = getPwdByUsernameFromDB(name); if (pwd == null || "".equals(pwd)) { return null; } return new SimpleAuthenticationInfo(name, pwd, this.getName()); } private String getPwdByUsernameFromDB(String name) { return userInfoMap.get(name); } private Set
getRolesByNameFromDB(String name) { return roleMap.get(name); } private Set
getPermissionsByNameFromDB(String name) { return permissionMap.get(name); }}

3. 配置Shiro核心安全配置

创建一个Shiro配置类,用于整合各种安全配置:

@Configurationpublic class ShiroConfig {    @Bean    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();        shiroFilterFactoryBean.setSecurityManager(securityManager);        Map
filterMap = new LinkedHashMap<>(); filterMap.put("/*", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); shiroFilterFactoryBean.setLoginUrl("/toLogin"); shiroFilterFactoryBean.setUnauthorizedUrl("/noAuth"); return shiroFilterFactoryBean; } @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(userRealm); return securityManager; } @Bean(name = "userRealm") public UserRealm getRealm() { return new UserRealm(); } @Bean public ShiroDialect getShiroDialect() { return new ShiroDialect(); }}

4. 测试与验证

创建一个RestController,用于测试Shiro相关的认证和授权功能:

@RestControllerpublic class UserController {    @Autowired    private IUserService userService;    @RequestMapping(value = "test/login", method = RequestMethod.POST)    public String login(String username, String password) {        try {            Subject subject = SecurityUtils.getSubject();            UsernamePasswordToken token = new UsernamePasswordToken(username, password);            subject.login(token);            return "登录成功";        } catch (UnknownAccountException e) {            return "用户名错误";        } catch (IncorrectCredentialsException e) {            return "密码错误";        }    }    @GetMapping("/toLogin")    public String toLogin() {        return "登录页面";    }    @GetMapping("/noAuth")    public String noAuth() {        return "无权限访问";    }}

项目简要说明

该项目采用了Shiro框架进行用户认证和权限管理,主要包括以下几个部分:

  • 引入了Shiro相关的Spring依赖包,确保项目能够正常运行和集成
  • 定义了一个自定义的Realm类,用于实现极端化认证逻辑
  • 配置了Shiro安全管理器及相关过滤器
  • 提供了一个RESTful API用于用户登录和权限验证
  • 项目中通过注入式配置和依赖管理,使得代码更加简洁易懂。

    转载地址:http://pbrqz.baihongyu.com/

    你可能感兴趣的文章
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>