首页 > 其他分享 >15、shiro请求授权实现

15、shiro请求授权实现

时间:2022-09-27 13:24:32浏览次数:53  
标签:return bean 15 add user new 授权 filterMap shiro

config包

ShiroConfig

点击查看代码
@Configuration
public class ShiroConfig {
    // shiroFilterFactoryBean
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        // 设置安全管理器
        bean.setSecurityManager(defaultWebSecurityManager);
        // 添加shiro内置过滤器
/**
 * anon:无需认证就可以访问
 * authc:必须认证才能访问
 * user:必须拥有记住我才能访问
 * perms:拥有某个资源权限才能访问
 * role : 拥有某个角色权限才能访问
 */
       // 拦截
        Map<String, String> filterMap=new HashMap<>();

//        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
    @Bean(name = "securityManager")
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 关联Realm
        securityManager.setRealm(userRealm);
        return securityManager;
    }

    // 创建RealM对象,需要自定义类
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
    // 整合shiroDialect : 用来整合shiro 和thymeleaf
    @Bean
    public ShiroDialect getShiroDialect(){
        return new ShiroDialect();
    }

}

UserRealm (授权和认证)

点击查看代码

public class UserRealm extends AuthorizingRealm {
    @Autowired
    UserService userService;

// 授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("执行了=》授权doGetAuthorizationInfo");
        // SimpleAuthorizationInfo
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
       /* shrioconfig里面设置了user访问add页面需要add权限,这里给了所有add权限
        info.addStringPermission("user:add");*/
        // 拿到当前这个对象
        Subject subject = SecurityUtils.getSubject();
        User currentUser = (User) subject.getPrincipal(); // 拿到user对象

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

        return info;
    }
// 认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        System.out.println("执行了=》认证doGetAuthorizationInfo");
        // 连接真实数据库

        UsernamePasswordToken userToken = (UsernamePasswordToken) token;
        User user = userService.queryUserByName(userToken.getUsername());

        if (user==null){
            return null; // 用户名不匹配,抛出异常
        }
        Subject currentSubject = SecurityUtils.getSubject();
        Session session = currentSubject.getSession();
        session.setAttribute("loginUser",user);


        // md5加密,MD5盐值加密
        // 密码认证 shiro 做
        return new SimpleAuthenticationInfo(user,user.getPwd(),"");
    }
}

标签:return,bean,15,add,user,new,授权,filterMap,shiro
From: https://www.cnblogs.com/ahhh7931/p/16734244.html

相关文章

  • 1015. 摘花生
    https://www.acwing.com/problem/content/description/1017/#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>usingnamespacestd;consti......
  • 已知A矩阵为: 4 20 12 8 3 15 0 40 8 22 12 36 11 30 18 46
    已知A矩阵为: 4  20 12 8 3  15  0 40 8  22 12 36 11 30 18 46 将A中元素能被3整除的,全部置0  要求输出4200......
  • 已知A矩阵为: 4 20 12 8 3 15 0 40 8 22 12 36 11 30 18 46
    已知A矩阵为: 4  20 12 8 3  15  0 40 8  22 12 36 11 30 18 46 将A中元素大于10且小于25的数找出来,并输出该值在矩阵中的坐标......
  • 已知A为4*5的矩阵 12 3 4 7 8 5 6 9 11 13 2 1 15 20 2
    已知A为4*5的矩阵12  3  4  7  85   6  9  11 132   1  15 20 2110  6  11  8  9完成如下操作:将A(2,4)的......
  • 已知A矩阵为: 4 20 12 8 3 15 0 40 8 22 12 36 11 30 18 46 将A中
    已知A矩阵为:4  20 12 83  15  0 408  22 12 3611 30 18 46将A中元素小于等于12全部置0要求输出02000015040......
  • 15 -- 排序算法之选择排序
    选择排序的思想:选择排序(selectsorting)也是一种简单的排序方法,它的基本思想是:第一次排序从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次排序从arr[1]~arr[n-1]中......
  • LeetCode[150] 逆波兰表达式求值
    1逆波兰表达式求值1.1题目描述        根据逆波兰表示法,求表达式的值。有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 ......
  • CF1155D 题解
    题目传送门题目分析说实话,第一眼这题以为是贪心...(事实上我看所有动态规划都像贪心)。然后接着发现贪心明显做不了,又看见最大子段和,很容易联想到\(\text{dp}\)。在设计......
  • 15. NumPy字符串处理函数
    1.前言NumPy提供了许多字符串处理函数,它们被定义在用于处理字符串数组的numpy.char这个类中,这些函数的操作对象是string_或者unicode_字符串数组。如下表所示:Num......
  • [CF1562E]Rescue Niwen!
    做题时间:2022.9.22\(【题目描述】\)多组数据,每组数据给定一个字符串\(s(|s|\leq5000,\sum|s|\leq10^4)\),将\(s\)的所有子串排序,按照在\(s\)中出现的位置\(l,r\)......