Shiro入门之实现登录登出

概述

这里使用Shiro来实现用户的登录和登出功能。

前提:已经会Spring集成Shiro。即使没有下面也会提供源码,下面只说明Shiro部分的核心代码,如Mapper、Service类中的代码基本上就是从数据库中读取数据,而且源码有提供,不在说明。

实现

第一步:一个用于登录的页面和一个用于退出登录的页面。

login.html




    
    Login


用户名:
密码:
记住我:

注:登录成功的账户是root和123456

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


恭喜${sessionScope.get("user").username}登录成功!

退出

第二步:使用Shiro实现登录

Shiro入门之实现登录登出_第1张图片

第三步:实现退出逻辑

Shiro入门之实现登录登出_第2张图片

第四步:自定义类继承AuthorizingReal,实现里面的两个方法,但登录只需要实现认证方法doGetAuthenticationInfo()方法即可。

@Component
public class MyRealm extends AuthorizingRealm {
    @Autowired
    private UserService userService;

    // 完成授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    // 完成认证
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        // authenticationToken是主体传过来的认证信息,如果使用的是UsernamePasswordToken,那么可以转换成该类型
        UsernamePasswordToken token=(UsernamePasswordToken)authenticationToken;
        // 1.获取用户输入的用户名
        String username=token.getUsername();// token.getPrincipal();也是获取相同的用户名
        // 2.通过用户名从数据库中查询用户信息
        User user = userService.selectUserByUsername(username);
        // 3.判断查询到的用户信息是否有效
        if(user==null){
            throw new UnknownAccountException();
        }
        if(0==user.getState()){// 用户状态为0,表示该用户被禁用了
            throw new DisabledAccountException();
        }
        // 4.返回用户认证信息
        SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(
                username,// 可以是用户名,也可以是用户信息
                user.getPassword(),// 用户密码
                ByteSource.Util.bytes(username),// 为密码加的盐
                getName());// 固定写法,是一个名字
        return info;
    }
}

注意:这里的用户信息是从数据库查到的,用了Service、Mapper接口等,这属于SSM的知识,这里不做说明。

第五步:在spring的配置文件applicationContext.xml中设置自定义的Realm。




    
    
        
        
        
        
            
                
                
                /css/*=anon
                
                /login.html = anon
                
                /user/login = anon
                
                /testRole = roles["admin"]
                
                /testRole2 = roles ["admin","user"]
                
                /testPerms = perms["user:delete"]
                
                /testPerms2 = perms["user:delete","user:update"]
                
                
                
                
                /**=user
            
        
    
    
    
        
        
        
        
    
    
    
        
    
    
    
        
        
        
        
    
    
    
        
    
    
        
        
        
        
    

注意,数据库里面的密码是使用了Md5Hash加密了的,使用的盐的用户名。可以通过下面的代码来获取加密后的密文。

下面是关于配置的说明:

Shiro入门之实现登录登出_第3张图片

Shiro入门之实现登录登出_第4张图片

简化掉Shiro过滤器的配置:

Shiro入门之实现登录登出_第5张图片

第六步:在web.xml中配置Shiro的过滤器

Shiro入门之实现登录登出_第6张图片

其实上面这些步骤也是Spring集成Shiro的配置,都属于Shiro的配置。

源码

最好的办法还是看源码直观感受Shiro的登录。

源码地址:GitHub的Demo

你可能感兴趣的:(#,Shiro)