博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用户登录安全框架shiro—用户的认证和授权(一)
阅读量:4450 次
发布时间:2019-06-07

本文共 4970 字,大约阅读时间需要 16 分钟。

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

  这几天在公司独立开发一个供公司内部人员使用的小管理系统,客户不多但是登录一直都是简单的校验查询,没有使用任何安全框架来保驾护航,下午终于拿出以前的手段来完善了一下,将shiro安全框架与ssm整合使用的步骤和大家分享一下,都是些简单易懂的东西,希望努力没有白费,帮到大家。

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

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

1  
2
3
org.apache.shiro
4
shiro-core
5
1.2.3
6
7
8
org.apache.shiro
9
shiro-spring
10
1.2.3
11
12
13
org.apache.shiro
14
shiro-web
15
1.2.3
16
17
18
org.apache.shiro
19
shiro-ehcache
20
1.2.3
21

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

1 
2
3
DelegatingFilterProxy
4
org.springframework.web.filter.DelegatingFilterProxy
5
6
7
targetBeanName
8
shiroFilter
9
10
11
12
DelegatingFilterProxy
13
/*
14

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

1 
2
3
4
5 6
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /images/** = anon24 /js/** = anon25 /css/** = anon26
27 /auth/login = anon28
29 /** = authc30
31
32
33 34
35
36
37
38 39
40
41
42
43 44
45
46
47
48

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

  还需要说明的是,在上面的配置文件中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     @Override15     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     @Override32     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();这句代码在任何地方任何时候都能获取当前登录成功的用户信息。

很长年间没用shiro安全框架了,原理忘得都差不多了,但是驾驭它还是没问题的,如果哪儿写的不对的,希望各位指教,尽管我脾气很爆,哈哈哈。

 

转载于:https://www.cnblogs.com/1315925303zxz/p/6874219.html

你可能感兴趣的文章
三维绿幕标定与跟踪
查看>>
android ProgressBar自定义半圆形进度条
查看>>
局部变量的值赋给成员变量 案例(红色字体)
查看>>
Django
查看>>
hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
查看>>
CPU温度问题
查看>>
python学习记录一
查看>>
使用LINQ的Skip和Take函数分批获取数据
查看>>
IP通信基础 4月1日
查看>>
KeyProvider
查看>>
空指针为什么能调用成员函数?
查看>>
用MySQL的存储过程来实现一些经典函数
查看>>
NOI Linux下Emacs && gdb调试方法
查看>>
面试总结
查看>>
React (2) -- State and Lifecycle
查看>>
【转】在EmEditor上编译并运行JAVA
查看>>
数组扁平化
查看>>
ASP.NET项目站点配置Web.Config文件
查看>>
关于SqlDateTime溢出的问题
查看>>
jquery下php与ajax的数据交换方式
查看>>