千家信息网

springboot+thymeleaf+shiro标签怎么用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"springboot+thymeleaf+shiro标签怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家
千家信息网最后更新 2026年11月04日springboot+thymeleaf+shiro标签怎么用

本篇内容介绍了"springboot+thymeleaf+shiro标签怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、pom中加入依赖

                         org.springframework.boot                        spring-boot-starter-thymeleaf                        1.5.6.RELEASE                                                                        org.thymeleaf                        thymeleaf                        ${thymeleaf.version}                                                                org.apache.shiro                        shiro-spring                        1.4.0                                                                        com.github.theborakompanioni                        thymeleaf-extras-shiro                        1.2.1                

2、用户-角色-权限的表关系

//用户表public class User {    private Integer userId;    private String userName;    private Set roles = new HashSet<>();}//角色表public class User {    private Integer id;    private String role;    private Set modules = new HashSet<>();    private Set users = new HashSet<>();}//权限表public class Module {    private Integer mid;    private String mname;    private Set roles = new HashSet<>();}        //用户查询                                                                //查询用户信息,返回结果会自动分组,得到用户信息  

3、编写shiro核心类

@Configurationpublic class ShiroConfiguration {        //用于thymeleaf模板使用shiro标签    @Bean    public ShiroDialect shiroDialect() {        return new ShiroDialect();    }    @Bean(name="shiroFilter")    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager manager) {        ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();        bean.setSecurityManager(manager);        //配置登录的url和登录成功的url        bean.setLoginUrl("/loginpage");        bean.setSuccessUrl("/indexpage");        //配置访问权限        LinkedHashMap filterChainDefinitionMap=new LinkedHashMap<>();//        filterChainDefinitionMap.put("/loginpage*", "anon"); //表示可以匿名访问        filterChainDefinitionMap.put("/admin/*", "authc");//表示需要认证才可以访问        filterChainDefinitionMap.put("/logout*","anon");        filterChainDefinitionMap.put("/img/**","anon");        filterChainDefinitionMap.put("/js/**","anon");        filterChainDefinitionMap.put("/css/**","anon");        filterChainDefinitionMap.put("/fomts/**","anon");        filterChainDefinitionMap.put("/**", "anon");        bean.setFilterChainDefinitionMap(filterChainDefinitionMap);        return bean;    }    //配置核心安全事务管理器    @Bean(name="securityManager")    public SecurityManager securityManager(@Qualifier("authRealm") AuthRealm authRealm) {        System.err.println("--------------shiro已经加载----------------");        DefaultWebSecurityManager manager=new DefaultWebSecurityManager();        manager.setRealm(authRealm);        return manager;    }    //配置自定义的权限登录器    @Bean(name="authRealm")    public AuthRealm authRealm(@Qualifier("credentialsMatcher") CredentialsMatcher matcher) {        AuthRealm authRealm=new AuthRealm();        authRealm.setCredentialsMatcher(matcher);        return authRealm;    }    //配置自定义的密码比较器    @Bean(name="credentialsMatcher")    public CredentialsMatcher credentialsMatcher() {        return new CredentialsMatcher();    }    @Bean    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){        return new LifecycleBeanPostProcessor();    }    @Bean    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){        DefaultAdvisorAutoProxyCreator creator=new DefaultAdvisorAutoProxyCreator();        creator.setProxyTargetClass(true);        return creator;    }    @Bean    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager manager) {        AuthorizationAttributeSourceAdvisor advisor=new AuthorizationAttributeSourceAdvisor();        advisor.setSecurityManager(manager);        return advisor;    }}- - - -- - -- - -- - -- - - -- - - - -- public class AuthRealm extends AuthorizingRealm {    @Autowired    private UserService userService;    //认证.登录    @Override    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {        UsernamePasswordToken utoken=(UsernamePasswordToken) token;//获取用户输入的token        String username = utoken.getUsername();        User user = userService.selectByPhone(username);        return new SimpleAuthenticationInfo(user, user.getPassword(),this.getClass().getName());//放入shiro.调用CredentialsMatcher检验密码    }    //授权    @Override    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {        User user=(User) principal.fromRealm(this.getClass().getName()).iterator().next();//获取session中的用户        List permissions=new ArrayList<>();        Set roles = user.getRoleList();        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();        List listrole = new ArrayList<>();        if(roles.size()>0) {            for(Role role : roles) {                if(!listrole.contains(role.getRole())){                    listrole.add(role.getRole());                }                Set modules = role.getModules();                if(modules.size()>0) {                    for(Module module : modules) {                        permissions.add(module.getMname());                    }                }            }        }        info.addRoles(listrole);                       //将角色放入shiro中.    info.addStringPermissions(permissions);         //将权限放入shiro中.        return info;    }}//自定义密码比较器public class CredentialsMatcher extends SimpleCredentialsMatcher {    private  Logger logger = Logger.getLogger(CredentialsMatcher.class);    @Override    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {        UsernamePasswordToken utoken=(UsernamePasswordToken) token;        //所需加密的参数  即  用户输入的密码        String source = String.valueOf(utoken.getPassword());        //[盐] 一般为用户名 或 随机数        String salt = utoken.getUsername();        //加密次数        int hashIterations = 50;        SimpleHash sh = new SimpleHash("md5", source, salt, hashIterations);        String Strsh =sh.toHex();        //打印最终结果        logger.info("正确密码为:"+Strsh);        //获得数据库中的密码        String dbPassword= (String) getCredentials(info);        logger.info("数据库密码为:"+dbPassword);        //进行密码的比对        return this.equals(Strsh, dbPassword);    }}

4、登录控制器

    @RequestMapping("/loginUser")    public String loginUser(String username,String password,HttpSession session) {        UsernamePasswordToken usernamePasswordToken=new UsernamePasswordToken(username,password);        Subject subject = SecurityUtils.getSubject();        Map map=new HashMap();        try {            subject.login(usernamePasswordToken);   //完成登录            User user=(User) subject.getPrincipal();            session.setAttribute("user", user);            return "index";        } catch (IncorrectCredentialsException e) {            map.put("msg", "密码错误");        } catch (LockedAccountException e) {            map.put("msg", "登录失败,该用户已被冻结");        } catch (AuthenticationException e) {            map.put("msg", "该用户不存在");        } catch (Exception e) {            return "login";//返回登录页面        }        return map.toString();    }

5、thymeleaf页面权限控制

          //作为属性控制//作为标签        

6、标签说明

guest标签      用户没有身份验证时显示相应信息,即游客访问信息。user标签        用户已经身份验证/记住我登录后显示相应的信息。authenticated标签        用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。notAuthenticated标签        用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。principal标签        相当于((User)Subject.getPrincipals()).getUsername()。lacksPermission标签       如果当前Subject没有权限将显示body体内容。hasRole标签        如果当前Subject有角色将显示body体内容。hasAnyRoles标签         如果当前Subject有任意一个角色(或的关系)将显示body体内容。lacksRole标签        如果当前Subject没有角色将显示body体内容。hasPermission标签        如果当前Subject有权限将显示body体内容

"springboot+thymeleaf+shiro标签怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

标签 用户 登录 密码 权限 内容 角色 信息 身份 配置 验证 控制 成功 数据 数据库 更多 核心 知识 结果 页面 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 深圳九邦互联网科技有限公司 湖南永感互联网科技有限公司 互联网科技与金融科技 沃里互联网科技 广州紫鲸互联网科技 哈尔滨新华互联网科技 蓝色互联网科技 以后互联网后是啥科技 互联网科技创新服务 互联网和黑科技的看法 荆州市昕露互联网络科技有限公司 科技类公司包括互联网吗 工业互联网山东科技大学 银行科技岗属于互联网吗 深圳无忧互联网科技 广州千川互联网科技有限公司 昆明中奇联合互联网科技 安徽零酒互联网科技有限公司 现代科技的标志之一的互联网 百单网互联网科技有限公司 互联网科技工作委员会毛军 深圳艾佳互联网科技 四川慕妮娅互联网科技有限公司 互联网科技如何创业 互联网科技数字货币 吉林省码上互联网科技电话 求路客互联网科技电话 互联网科技和医药行业 上海互联网科技园景观
0