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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ios软件_iOS倒计时

    ios软件_iOS倒计时GitHub:https://github.com/remember17/CountdownTimer全局倒计时工具,可以维护任意多个倒计时当APP从后台进入前台的时候,倒计时不受影响,会根据时间线继续。使用方法: 把CountdownTimer.swift文件拖进项目 在CountdownTimer.swift的枚举CountDownKey中添加定时器 每个枚…

    2025年12月4日
    5
  • java在Socket传输中文乱码解决思路及代码「建议收藏」

    java在Socket传输中文乱码解决思路及代码「建议收藏」中文乱码产生的原因就是从GBK转到UTF-8,或者是不同的编码格式来回转,导致byte[]中存放的字节丢失。思路是:在客户端进行传输前,将需要传输的字节,以一个编码方式进行传输,假设设置GBK,之后在服务端接收到后,先使用newString(byte,“GBK”);去接收,这样只要保证传输时候设置的编码格式和接收的时候设置的编码格式就不会乱码。案例:对方要发报文,报文头中存在编码格式解决方案:publicstaticStringgetCharsetName(byte[]bytes){

    2022年7月9日
    25
  • HttpSession概述

    HttpSession概述什么是HttpSessionJavax.servlet.http.HttpSession接口表示一个会话,一个会话只能对应一个用户。我们可以把会话需要的共享数据保存到HttpSession中 获取HttpSession对象HttpSessionrequest.getSession():如果当前会话已经有了session对象,直接返回;如果没有则创建session并返回Htt…

    2022年7月12日
    19
  • php 7.1 openssl_decrypt() 代替 mcrypt_module_open() 方法

    php 7.1 openssl_decrypt() 代替 mcrypt_module_open() 方法

    2021年11月8日
    58
  • Spring和SpringMVC以及SpringBoot的区别

    Spring和SpringMVC以及SpringBoot的区别Spring是一个开源框架,为简化企业级应用开发而生。Spring可以是使简单的JavaBean实现以前只有EJB才能实现的功能。Spring是一个IOC和AOP容器框架。Spring容器的主要核心是:控制反转(IOC),传统的java开发模式中,当需要一个对象时,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象。而在…

    2022年5月20日
    43
  • spring中aop实现原理_Spring底层原理

    spring中aop实现原理_Spring底层原理写在前面:对于一个java程序员来说,相信绝大多数都有这样的面试经历,面试官问:你知道什么是aop吗?谈谈你是怎么理解aop的?等等诸如此类关于aop的问题。当然对于一些小白可能会一脸懵逼;对于一些工作一两年的,可能知道,哦!aop就是面向切面变成,打印日志啊,什么什么的,要是有点学习深度的呢可能会说aop底层实现利用了jdk动态代理,cglib啊什么的。很多时候可能面试就到此打住了,当然,然后也…

    2022年8月11日
    6

发表回复

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

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