首页 > 其他分享 >shiro使用

shiro使用

时间:2022-12-18 21:44:40浏览次数:41  
标签:return String securityManager 使用 new login public shiro

1、依赖

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.10.0</version>
        </dependency>

2、配置类

public class UserRealm extends AuthorizingRealm {
    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }
    //认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        return null;
    }
}
@Configuration
public class ShiroConfig {
    //shiroFilterFactoryBean
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        bean.setSecurityManager(securityManager);
        //内置拦截器
        //anon 无需认证
        //authc 必须认证
        //user 必须有记住我功能
        //perms 拥有对某个资源权限才能访问
        //role 具有某种角色
        //登录拦截
        Map<String, String> filterMap = new HashMap<>();
        filterMap.put("/level1", "authc");
        filterMap.put("/level2", "anon");
        bean.setFilterChainDefinitionMap(filterMap);

        //设置登录的请求
        bean.setLoginUrl("/login");
        return bean;
    }

    //DefaultWebSecurityManager
    //安全管理器
    @Bean("securityManager")
    public DefaultWebSecurityManager securityManager(@Qualifier("userRealm") UserRealm userRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(userRealm);
        return securityManager;
    }
    //realm对象
    @Bean("userRealm")
    public UserRealm userRealm(){
        return new UserRealm();
    }
}

用户认证

@RequestMapping("/login")
    public String login(String username, String password, Model model){
        //获取当前的用户
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        try{
            subject.login(token);
            return "index";
        } catch (UnknownAccountException e){
            model.addAttribute("msg", "用户名不存在");
            return "login";
        } catch (IncorrectCredentialsException e){
            model.addAttribute("msg", "密码错误");
            return "login";
        }
    }
@Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();
        String user = "root";
        String pwd = "1234";
        if(!username.equals(user)){
            return null;
        }

        return new SimpleAuthenticationInfo("",pwd,"");
    }

标签:return,String,securityManager,使用,new,login,public,shiro
From: https://www.cnblogs.com/yanshiheng/p/16991013.html

相关文章

  • (转载)Linux C 中断言assert()使用简介
    assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句,它的作......
  • LeetCode 44、144、145 使用非递归的方法遍历二叉树
    前序遍历如果要实现二叉的在非递归遍历需要借助栈这个数据结构。因为前序遍历先处理的是根节点再处理左子树和右子树,所以在循环之前需要将根棵树的根节点放入栈中,在循环中......
  • 使用浏览器inspect调试app
    使用浏览器inspect调试app在开发混合项目的过程中,常常需要在app环境排查问题,接口可以使用fiddler等工具来抓包,但是js错误就不好抓包了,这里介绍一种调试工具-浏览器。1.调......
  • jclasslib安装和使用
      这是一款可以查询class文件的插件,在代码运行后才会显示出来  ......
  • 服务器集群使用过程中遇到的一些问题
    自己参与开发的项目,在测试环境只有一台服务器,每次部署的时候只需要部署单台服务器。可是生产环境则不一样,生产环境部署了10台左右的应用服务,跑起来的效果和单台服务......
  • RDLC 报表使用
    RDLC报表使用  RDLC报表使用笔记1.        RDLC介绍2.        RDLC常用的功能介绍1)       WebLogAnalyzer2)       子报表3)  ......
  • pager-taglib分页标签使用方法
    以前写的那个[​​jsp中实现分页显示数据​​​]方法不通用,得找个分页标签。关于pager-taglib的使用方法网上虽说一大堆,但是同样费我不少脑细胞去看。有的代码不齐全,有的根......
  • 自学鸿蒙应用开发(22)- 定义和使用字符串资源
    本文介绍在鸿蒙应用开发过程中字符串资源的使用方法。StringResource定义字符串资源到到这篇文章之前,我们的所有字符串都是直接在代码中或者是嗯布局文件中直接使用的。......
  • 使用 udev 高效、动态地管理 Linux 设备文件(转载)--2
    清单6.简单说明键值对的例子KERNEL是匹配键,NAME和MODE是赋值键。这条规则的意思是:如果有一个设备的内核设备名称为sda,则该条件生效,执行后面的赋值:在 ​​/dev​​下......
  • 在虚拟机中直接使用liveCD:lfslivecd-x86-6.3-r2160.iso
    1.环境虚拟机:vmware-6.5liveCD:lfslivecd-x86-6.3-r2160.iso2.安装参考:http://blogold.chinaunix.net/u/13265/showart.php?id=477122选择File->New->VirtualMac......