springboot整合shiro

简单搭建项目环境

1、首先进行springboot项目的创建
2、导入shiro依赖

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-starter</artifactId>
        </dependency>

3、配置自定义realm 继承shiro的认证类 AuthorizingRealm
在这个类中有两个方法,分别是认证和授权,认证是对角色的登录校验,授权是对角色的权限进行赋值

public class UserRealm extends AuthorizingRealm {

    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("执行授权");
        Subject subject = SecurityUtils.getSubject();
        String username = subject.getPrincipal().toString();
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
        if (username.equals("admin")){
            info.addRole("admin");
        }
        return info;
    }

    //身份认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        UsernamePasswordToken userToken = (UsernamePasswordToken) authenticationToken;
        String s = authenticationToken.getPrincipal().toString();
        System.out.println(s+"想登录");
        if (s.equals("admin")){
            return new SimpleAuthenticationInfo(authenticationToken.getPrincipal(),"123456","qwe");
        }
        return null;
    }
}

4、配置shiroconfig,将自定义认证类交给shiro的securityManager管理,同时配置shiro的filter来进行身份过滤。

@Configuration
public class ShiroConfig {
    //创建自定义认证类
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
    @Bean
    public DefaultWebSecurityManager defaultWebSecurityManager(UserRealm userRealm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        defaultWebSecurityManager.setRealm(userRealm);
        return defaultWebSecurityManager;
    }
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
        //添加身份认证过滤器
        /*
            anno:无需认证
            authc:必须认证
            user:必须拥有记住我功能
            perms:拥有某个资源的权限
            role:拥有某个角色
         */
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        filterChainDefinitionMap.put("/add","authc");
        filterChainDefinitionMap.put("/add","perms[user:add]");
        filterChainDefinitionMap.put("/del","roles[admin]");
        shiroFilterFactoryBean.setLoginUrl("/toLogin");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }
}

5、简单案列 详情参照springboot整合thymeleaf

<--login.html 登录界面-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form method="post" action="/login">
        <input name="username" type="text"><br>
        <input name="password" type="text"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

《---index.html--》
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/add">add</a><br>
    <a href="/del">del</a><br>
</body>
</html>

controller

@Controller
@Slf4j
public class UserController {
    @RequestMapping("/")
    public String index(){
        return "index";
    }

    @RequestMapping("/add")
    public String add(){
        return "user/add";
    }
    @RequestMapping("/del")
    public String del(){
        return "user/del";
    }
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "login";
    }
    @RequestMapping("/login")
    public String login(String username,String password){
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);
        try {
            subject.login(token);
        } catch (UnknownAccountException uae) {
            log.info("There is no user with username of " + token.getPrincipal());
        } catch (IncorrectCredentialsException ice) {
            log.info("Password for account " + token.getPrincipal() + " was incorrect!");
        } catch (LockedAccountException lae) {
            log.info("The account for username " + token.getPrincipal() + " is locked.  " +
                    "Please contact your administrator to unlock it.");
        }
        return "index";
    }
    @RequestMapping("/logout")
    public String logout(){
        Subject subject = SecurityUtils.getSubject();
        subject.logout();
        return "index";
    }
}

总结:通过上述步骤就可以将shiro简单整合到springboot中去了,这只是一个简单的案列,更多配置请参照官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值