栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot整合shiro,实现web的登录认证

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot整合shiro,实现web的登录认证

目录

1.导入shiro依赖:

2.创建自定义的Realm,继承于shiro的AuthorizingRealm :

3.配置shiro:

4.编写登录控制类:

5.在页面中输入用户名和密码,并将值提交至控制类中的/login请求去执行即可


1.导入shiro依赖:

            org.apache.shiro
            shiro-spring-boot-web-starter
            1.9.0

2.创建自定义的Realm,继承于shiro的AuthorizingRealm :
public class LoginRealm extends AuthorizingRealm {

    
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
        //转换令牌并获取用户输入的用户名
        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
        String username = usernamePasswordToken.getUsername();
        SimpleAuthenticationInfo info = null;
        //进行登录校验
        if ("admin".equals(username)) {//如果用户名为admin,则进行校验
            //返回进行登录认证的AuthenticationInfo对象,交给securityManager去校验
            info = new SimpleAuthenticationInfo(username, //登录用户名,登录成功后,该值会填充到subject中
                    "password", //登录成功需要的密码,会与用户输入的密码进行登录匹配
                    this.getName());//指定使用的Realm名称
        } else {
            //登录失败
            System.out.println("用户名错误");
        }

        return info;
    }
}

3.配置shiro:

自定义完Realm后,创建一个shiro配置类,在其中依次创建自定义的Realm对象、安全管理器DefaultWebSecurityManager 以及过滤请求ShiroFilterFactoryBean对象,并使用@Bean注解将对象交由spring容器控制(将自定义的Realm对象添加到安全管理器中,并为ShiroFilterFactoryBean对象配置此安全管理器)

@Configuration
public class ShiroConfig {

    
    @Bean
    public Realm realm() {
        LoginRealm loginRealm = new LoginRealm();

        return loginRealm;
    }

    
    @Bean
    public DefaultWebSecurityManager securityManager(Realm realm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //为安全管理器添加自定义的Realm
        securityManager.setRealm(realm);

        return securityManager;
    }

    
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        //创建ShiroFilterFactoryBean对象
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //给ShiroFilterFactoryBean对象配置安全管理器
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        //设置受限资源和公共资源
        Map map = new HashMap<>();
        map.put("/login", "anon");//对登录请求放行
        map.put("
    @RequestMapping("/toLogin")
    public String toLogin() {
        return "login";
    }

    
    @RequestMapping("/logout")
    public String logout() {
        Subject subject = SecurityUtils.getSubject();
        subject.logout();//退出登录
        return "redirect:/toLogin";

    }

    
    @RequestMapping("/toIndex")
    public String toIndex() {
        return "index";
    }

    
    @RequestMapping("/login")
    public String login(String username, String password) {
        //通过用户输入的用户名和密码创建令牌
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        //创建Subject对象,进行登录认证
        Subject subject = SecurityUtils.getSubject();
        try {
            subject.login(token);//进行登录认证
            //登录成功,前往index页面
            System.out.println("登录成功");
            return "redirect:/toIndex";
        } catch (AuthenticationException e) {
            //登录失败,重定向至登录页面
            System.out.println("登录失败");
            return "redirect:/toLogin";
        }

    }
}

5.在页面中输入用户名和密码,并将值提交至控制类中映射的/login请求去执行即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944380.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号