shiro 简单登录demo

清疚 2024-04-08 11:31 141阅读 0赞

1.shiro 是java强大的安全认证框架

  1. shiro框架的核心功能:认证,授权,会话管理,加密
  2. shiro框架认证流程

20190107113121342.png

Application Code:应用程序代码,由开发人员负责开发的

Subject:框架提供的接口,代表当前用户对象

SecurityManager:框架提供的接口,代表安全管理器对象

Realm:可以开发人员编写,框架也提供一些,类似于DAO,用于访问权限数据

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NDcyMjUy_size_16_color_FFFFFF_t_70

2.shiro +ssm 登录demo

第一步:引入shiro框架相关的jar

20190107113708458.png

第二步:在web.xml中配置spring框架提供的用于整合shiro框架的过滤器

shiroFilter org.springframework.web.filter.DelegatingFilterProxy shiroFilter /\*

第三步:在spring-shiro.xml配置文件中配置bean,id为shiroFilter

/css/\*\* = anon /js/\*\* =anon /images/\*\* = anon /login.jsp\* =anon /register.jsp\* =anon /login.do\* =anon /register.do\* =anon /checkUser.do\* =anon /\* =authc

第四步:配置安全管理器

第五步:修改UserController中的login方法,使用shiro提供的方式进行认证操作

  1. /*
  2. * 用户登录,使用shiro提供的方式验证
  3. */
  4. @RequestMapping(value = "/login.do")
  5. public String login(User u, Model model, HttpSession session) {
  6. //获得当前用户到登录对象,现在状态为未认证
  7. Subject subject=SecurityUtils.getSubject();
  8. //用户名密码令牌
  9. AuthenticationToken token=new UsernamePasswordToken(u.getUsername(),Md5Utils.md5(u.getPassword()));
  10. //shiro 使用异常捕捉登录失败消息
  11. try {
  12. //将令牌传到shiro提供的login方法验证,需要自定义realm
  13. subject.login(token);
  14. //没有异常表示验证成功
  15. User user=uservice.login(u);
  16. session.setAttribute("user", user);
  17. return "/home/home";
  18. } catch (IncorrectCredentialsException ice){
  19. model.addAttribute("error","用户名或密码不正确!");
  20. }catch(UnknownAccountException uae){
  21. model.addAttribute("logininfo","未知账户!");
  22. }catch(LockedAccountException lae){
  23. model.addAttribute("logininfo","账户已锁定!");
  24. }catch(ExcessiveAttemptsException eae){
  25. model.addAttribute("logininfo","用户名或密码错误次数太多!");
  26. }catch(AuthenticationException ae){
  27. ae.printStackTrace();
  28. model.addAttribute("logininfo","验证未通过!");
  29. }catch (Exception e) {
  30. model.addAttribute("logininfo","验证未通过!");
  31. }
  32. return "/login";
  33. }

第六步:自定义realm,并注入给安全管理器

  1. public class MyShiroRealm extends AuthorizingRealm {
  2. @Autowired
  3. private UserServiceImpl service;
  4. //授权方法
  5. @Override
  6. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
  7. // TODO 未书写权限,只演示登录认证
  8. return null;
  9. }
  10. //认证访法
  11. @Override
  12. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  13. System.out.println("realm------------------------");
  14. UsernamePasswordToken mytoken=(UsernamePasswordToken) token;
  15. String username=mytoken.getUsername();
  16. User u=new User();
  17. u.setUsername(username);
  18. //根据用户名查询数据·库中的密码
  19. User user = service.login(u);
  20. if(user==null) {
  21. //用户不存在
  22. return null;
  23. }
  24. //如果能查询到,再由框架比对数据库中查询到的密码和页面提交的密码是否一致
  25. AuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());
  26. return info;
  27. }
  28. }

注入安全管理器 (自定义realm中注入的service层查数据库,启动项目时会注入失败,需要在注入realm之前,注入service层bean

这的service层和dao层就不再提供了,因为很简单,就是一个根据用户名查询放回用户信息的接口

完整的shiro配置文件

/css/\*\* = anon /js/\*\* =anon /images/\*\* = anon /login.jsp\* =anon /register.jsp\* =anon /login.do\* =anon /register.do\* =anon /checkUser.do\* =anon /\* =authc

shiro配置文件需要引入到spring中,在web.xml原来的spring文件导入中添加classpath:spring-shiro.xml

contextConfigLocation classpath:applicationContext.xml, classpath:spring-shiro.xml

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shiro 简单登录demo

    1.shiro 是java强大的安全认证框架 1. shiro框架的核心功能:认证,授权,会话管理,加密 2. shiro框架认证流程 ![201901071131