SpringBoot 整合 Shiro MD5加密,thymeleaf页面展示

本文详细介绍了如何在SpringBoot项目中整合Shiro进行权限管理,并使用MD5加密,同时展示了Thymeleaf页面的交互。内容包括Shiro配置类、UserRealm实现、MyController控制层、UserMapper、UserService接口及其实现、页面模板如index、login、add、update,以及配置文件和依赖管理。提供了两个实用的参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试结构总览
在这里插入图片描述

ShiroConfig Shiro配置类

@Configuration
public class ShiroConfig {
   
   


    //ShiroFilterFactoryBean,3、
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
   
   
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        //设置安全管理器
        bean.setSecurityManager(defaultWebSecurityManager);

        //添加 shiro 的内置过滤器
        /**
         * anon :无需认证就可以访问
         * authc:必须认证了才能访问
         * user:必须拥有 记住我 功能才能访问
         * perms:拥有对某个资源的权限才能访问
         * role:拥有某个角色权限才能访问
         */

        //拦截
        Map<String,String> filterMap = new LinkedHashMap<>();
//        filterMap.put("/user/add","authc");
//        filterMap.put("/user/update","authc");

        //授权,正常情况下,没有授权会跳转到未授权页面
        filterMap.put("/user/add","perms[user:add]");
        filterMap.put("/user/update","perms[user:update]");

        filterMap.put("/user/*","authc");
        bean.setFilterChainDefinitionMap(filterMap);

        //设置登录的跳转请求
        bean.setLoginUrl("/toLogin");
        //设置未授权跳转请求
        bean.setUnauthorizedUrl("/noauth");
        return bean;
    }

    //DefaultWebSecurityManager,2、
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
   
   
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //关联UserRealm
        securityManager.setRealm(userRealm);
        return securityManager;

    }

    //创建 realm 对象,需要自定义类,1、
    @Bean
    public UserRealm userRealm(@Qualifier("hashedCredentialsMatcher") HashedCredentialsMatcher hashedCredentialsMatcher){
   
   
        UserRealm userRealm = new UserRealm();
//      设定 密码校验规则
        userRealm.setCredentialsMatcher(hashedCredentialsMatcher);
        return userRealm;
    }



//整合 ShiroDialect ,用来整合 Shiro thymeleof
    @Bean
    public ShiroDialect getShiroDialect(){
   
   
        return new ShiroDialect();
}
    /**
     * 凭证匹配器
     * 密码校验交给Shiro的SimpleAuthenticationInfo进行处理
     */

    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher() {
   
   
        //Shiro自带加密
        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
        //散列算法使用md5
        credentialsMatcher.setHashAlgorithmName("MD5");
        //散列次数,1表示md5加密一次
        credentialsMatcher.setHashIterations(1);
        //credentialsMatcher.setStoredCredentialsHexEncoded(true);
        return credentialsMatcher;
    }

}

UserRealm 类

//自定义的  UserRealm extends AuthorizingRealm
public class UserRealm extends AuthorizingRealm {
   
   

    @Autowired
    UserService userService;


    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
   
   

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

        //拿到当前登录的这个对象
        Subject subject = SecurityUtils.getSubject();
        User currentUser = (User) subject.getPrincipal();  //拿到User 对象

        //设置当前用户的权限
        info.addStringPermission(currentUser.getPerms());

        return info;
    }

    //认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
   
   


        UsernamePasswordToken userToken= (UsernamePasswordToken) authenticationToken;

        //连接真实数据库
        User user = userService.queryUserByName(userToken.getUsername());

        if (user==null){
   
     //没有这个人
            return null; //抛出异常  UnknownAccountException
        }

// 在 Shiro 整合后的 thymeleaf页面中,判断用户是否登录
        Subject subject = SecurityUtils.getSubject();
        Session sessio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值