ssm整合shiro框架的使用,实现权限管理「建议收藏」

ssm整合shiro框架的使用,实现权限管理「建议收藏」ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛。ssm整合shiro安全框架的步骤:1、引入shiro安全框架的所需jar包<!–shiro–><dependency><groupId>org.apache.shiro</groupI…

大家好,又见面了,我是你们的朋友全栈君。

    ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛。

ssm整合shiro安全框架的步骤:

1、引入shiro安全框架的所需jar包

<!– shiro –>

        <dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-core</artifactId>

            <version>1.2.3</version>

        </dependency>

        <dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-spring</artifactId>

            <version>1.2.3</version>

        </dependency>

        <dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-web</artifactId>

            <version>1.2.3</version>

        </dependency>

        <dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-ehcache</artifactId>

            <version>1.2.3</version>

        </dependency>

2、在web.xml文件中配置shiro拦截器

复制代码

 1 <!-- spring整合安全框架 -->
 2     <filter>
 3         <filter-name>DelegatingFilterProxy</filter-name>
 4         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
 5         <!-- 初始化参数 -->
 6         <init-param>
 7             <param-name>targetBeanName</param-name>
 8             <param-value>shiroFilter</param-value>
 9         </init-param>
10     </filter>
11     <filter-mapping>
12         <filter-name>DelegatingFilterProxy</filter-name>
13         <url-pattern>/*</url-pattern>
14     </filter-mapping>

复制代码

3、创建spring整合shiro安全框架的配置文件applicationContext-shiro.xml(各位在拷贝的时候记得修改一下跳转连接地址)

复制代码

 1 <!-- shiro开启事务注解 -->
 2     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
 3         <property name="securityManager" ref="securityManager" />
 4     </bean>
 5     
 6     <!-- 
 7         /**  除了已经设置的其他路径的认证
 8      -->
 9     <!-- shiro工厂bean配置 -->
10     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
11         <!-- shiro的核心安全接口 -->
12         <property name="securityManager" ref="securityManager"></property>
13         <!-- 要求登录时的连接 -->
14         <property name="loginUrl" value="/login.jsp"></property>
15         <!-- 登录成功后要跳转的连接(此处已经在登录中处理了) -->
16         <!-- <property name="successUrl" value="/index.jsp"></property> -->
17         <!-- 未认证时要跳转的连接 -->
18         <property name="unauthorizedUrl" value="/refuse.jsp"></property>
19         <!-- shiro连接约束配置 -->
20         <property name="filterChainDefinitions">
21             <value>
22                 <!-- 对静态资源设置允许匿名访问 -->
23                 /images/** = anon
24                 /js/** = anon
25                 /css/** = anon
26                 <!-- 可匿名访问路径,例如:验证码、登录连接、退出连接等 -->
27                 /auth/login = anon
28                 <!-- 剩余其他路径,必须认证通过才可以访问 -->
29                 /** = authc
30             </value>
31         </property>
32     </bean>
33     
34     <!-- 配置shiro安全管理器 -->
35     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
36         <property name="realms" ref="customRealm"></property>
37     </bean>
38     
39     <!-- 自定义Realm -->
40     <bean id="customRealm" class="com.zxz.auth.realm.UserRealm">
41         <property name="credentialsMatcher" ref="credentialsMatcher"></property>
42     </bean>
43     
44     <!-- 配置凭证算法匹配器 -->
45     <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
46         <!-- Md5算法 -->
47         <property name="hashAlgorithmName" value="Md5"></property>
48     </bean>

复制代码

【高能说明:以上俩个配置文件中加粗画线的红色部分必须一致,没毛病。】

  还需要说明的是,在上面的配置文件中shiro连接约束配置那块,要特别小心,哥们我就在哪块吃了2天的折磨亏,当时是只配置了/** = authc,没有配置可匿名访问的路径,当时是什么情况吧,就是无限次的调试无限次的修改,我是真长记性了,还有一点就是在配置的时候把你项目中的静态资源放开,被屏蔽了啊,好心提醒,不谢。

4、当然,在这之前,还要编写自定义realm类,该类必须认AuthorizingRealm类做爸爸,不然你是不行滴,之后还有俩个儿子需要处理了,一个是认证另一个授权,理论我就不多说了,MD没用。

复制代码

 1 public class UserRealm extends AuthorizingRealm {
 2     
 3     @Autowired
 4     private UserService userService;
 5     
 6     @Override
 7     public String getName() {
 8         return "customRealm";
 9     }
10     
11     /**
12      * 认证
13      */
14     @Override
15     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
16         // 获取用户名称
17         String username = (String) token.getPrincipal();
18         User user = userService.findByUsername(username);
19         if (user == null) {
20             // 用户名不存在抛出异常
21             System.out.println("认证:当前登录的用户不存在");
22             throw new UnknownAccountException();
23         }
24         String pwd = user.getPassword();
25         return new SimpleAuthenticationInfo(user, pwd, getName());
26     }
27 
28     /**
29      * 授权
30      */
31     @Override
32     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection princ) {
33         return null;
34     }
35 }

复制代码

5、到这儿,shiro安全框架的整合是完成了,然后编写action类来实现登录功能,不多说了,直接上代码。

复制代码

 1 /**
 2      * shiro框架登录
 3      * @param user
 4      */
 5     @RequestMapping(value = "/login",method=RequestMethod.POST)
 6     public ModelAndView login(User user){
 7         // 表面校验
 8         if(!StringUtil.isNullOrBlank(user.getUsername()) || !StringUtil.isNullOrBlank(user.getPassword())){
 9              return new ModelAndView("login")
10                      .addObject("message", "账号或密码不能为空")
11                      .addObject("failuser", user);
12         }
13         // 获取主体
14         Subject subject = SecurityUtils.getSubject();
15         try{
16             // 调用安全认证框架的登录方法
17             subject.login(new UsernamePasswordToken(user.getUsername(), user.getPassword()));
18         }catch(AuthenticationException ex){
19             System.out.println("登陆失败: " + ex.getMessage());
20             return new ModelAndView("login")
21                     .addObject("message", "用户不存在")
22                     .addObject("failuser", user);
23         }
24         // 登录成功后重定向到首页
25         return new ModelAndView("redirect:/index");
26     }

复制代码

  最后需要给大家说的就是,当某用户登录成功之后,shiro安全框架就会将用户的信息存放在session中,你可以通过User user = (User) SecurityUtils.getSubject().getPrincipal();这句代码在任何地方任何时候都能获取当前登录成功的用户信息。

本文转自:https://www.cnblogs.com/1315925303zxz/p/6874219.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135772.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月3日 下午10:20
下一篇 2022年5月3日 下午10:40


相关推荐

  • 交互式脚本_交互式和脚本式的区别

    交互式脚本_交互式和脚本式的区别带你打开脚本的大门,领略语言之美

    2022年8月16日
    11
  • js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播

    js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播结论element.addEventListener(event,function[,useCapture])event:事件名称,如clickfunction:指定要事件触发时执行的函数,可以传入事件参数useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。默认false:在冒泡阶段执行指定事件true:在捕获阶段执行事件event.stopPropagat…

    2025年6月9日
    4
  • java switch条件_Java switch 条件语句用法详解[通俗易懂]

    java switch条件_Java switch 条件语句用法详解[通俗易懂]首页>基础教程>循环条件语句>条件语句switchJavaswitch条件语句用法详解switchcase语句在很多编程语言中的功能都是等于条件判断,java中为多路分支选择流程专门提供了switch语句,switch语句根据多个表达式的值,选择运行多个操作中的一个。当需要对选项进行等值判断时,使用switch语句更加简洁明了。switch的case语句可以处…

    2022年7月14日
    53
  • Android Toast使用的简单小结

    Android Toast使用的简单小结老规矩 先上效果图吧主要实现了几种常用的方式 1 最基本的 Toast 系统自带 Toast 采用的是队列的方式 等当前 Toast 消失后 下一个 Toast 才能显示出来 原因是 Toast 的管理是在队列中 点击一次 就会产生一个新的 Toast 要等这个队列中的 Toast 处理完 这个显示 Toast 的任务才算结束 nbsp so 我们可以把 Toast 改成单例模式 没有 Toast 再新建它 这样也就

    2026年3月19日
    1
  • BS和CS对比_CS与BS对接

    BS和CS对比_CS与BS对接BS和CS对比牛腩新闻发布系统已经开始了不短的时间了,CS的项目也算是接触了下,接下来对比下CS和BS       CS和BS是什么?       C/S结构即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销(客户端和服务器端的通信),可以充分利用两端硬件环境的优势。B/S结

    2022年10月16日
    4
  • ROC曲线和AUC面积理解[通俗易懂]

    ROC曲线和AUC面积理解[通俗易懂]关注微信公众号【Microstrong】,我现在研究方向是机器学习、深度学习,分享我在学习过程中的读书笔记!一起来学习,一起来交流,一起来进步吧!本文同步更新在我的微信公众号中,公众号文章地址:https://mp.weixin.qq.com/s?__biz=MzI5NDMzMjY1MA==&amp;mid=2247484146&amp;idx=1&amp;sn=963765a3ede231292…

    2022年5月17日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号