admin 管理员组

文章数量: 1086019


2024年2月7日发(作者:drying是什么意思)

basic authorization shiro

什么是基本认证(Basic Authorization)?

基本认证(Basic Authorization)是一种用于保护网络资源的认证协议,它是HTTP/1.0规范中定义的一种认证方式。基本认证通过在HTTP请求头中添加Authorization字段,将用户的凭证信息发送给服务器进行验证。在认证成功之后,服务器会返回一个状态码为200的响应,之后用户就可以访问受保护的资源。

基本认证的工作原理是什么?

基本认证的工作原理相对简单明了,以下是一步一步的示例:

1. 用户发送HTTP请求访问受保护的资源。

2. 服务器检查是否存在Authorization字段。如果不存在,服务器返回状态码为401的响应,同时在响应头中添加WWW-Authenticate字段,要求客户端进行认证。

3. 客户端接收到服务器返回的401响应后,会弹窗要求用户输入用户名和密码。

4. 客户端将用户名和密码进行Base64编码后,将编码后的字符串添加到Authorization字段中,再次发送HTTP请求进行访问。

5. 服务器收到请求后,会将Authorization字段中的凭证信息进行解码,

并与预先保存的用户凭证进行对比验证。

6. 如果凭证验证成功,服务器返回状态码为200的响应,并允许用户访问受保护的资源。

7. 如果凭证验证失败,服务器返回状态码为401的响应,客户端需要重新进行认证。

如何使用Shiro进行基本认证?

Apache Shiro是一个强大而灵活的开源安全框架,可以帮助我们实现基本认证功能。以下是使用Shiro进行基本认证的步骤:

1. 首先,我们需要引入Shiro的依赖,可以通过Maven等构建工具进行安装。在项目的文件中添加如下依赖:

xml

shiro-core

1.8.0

2. 在Shiro的配置文件中,我们需要配置一个Realm来处理用户的凭证验证。在配置文件中添加如下内容:

ini

[main]

myrealm = m

[users]

# 用户名=密码, 角色1, 角色2...

admin = admin, admin

user = user, guest

[roles]

# 角色=权限1, 权限2...

admin = *

user = /api/user/*

在这个配置中,我们定义了两个用户admin和user,以及相应的角色和权限。MyRealm类是我们自定义的Realm,需要实现Shiro的接口进行用户凭证验证。

3. 实现自定义的Realm类。创建一个名为MyRealm的类,实现ticatingRealm接口,并重写其中的方法。下面是一个简单的实现示例:

java

public class MyRealm extends AuthenticatingRealm {

@Override

protected AuthenticationInfo

doGetAuthenticationInfo(AuthenticationToken token) throws

AuthenticationException {

UsernamePasswordToken usernamePasswordToken =

(UsernamePasswordToken) token;

String username =

rname();

String password = new

String(sword());

根据用户名从数据库或其他存储中获取用户的凭证信息

String savedPassword =

getPasswordByUsername(username);

验证密码是否正确

if ((savedPassword)) {

return new SimpleAuthenticationInfo(username,

password, getName());

} else {

throw new AuthenticationException("用户名或密码错误");

}

}

private String getPasswordByUsername(String username) {

实现根据用户名获取密码的逻辑,可以从数据库中查询或其他方式获取

这里使用硬编码的方式进行演示

if ("admin".equals(username)) {

return "admin";

} else if ("user".equals(username)) {

return "user";

}

return null;

}

}

在这个示例中,我们通过重写doGetAuthenticationInfo方法来实现用户凭证验证逻辑。通过获取用户名和密码,再根据用户名从数据库中获取保存的密码,比对两者的值是否相同进行验证。

4. 在应用程序中,我们使用Shiro的Subject对象来进行认证操作。以下是一个简单的示例:

java

public class MyApp {

public static void main(String[] args) {

创建SecurityManager

DefaultSecurityManager securityManager = new

DefaultSecurityManager();

设置Realm

lm(new

IniRealm("classpath:"));

将SecurityManager设置到当前环境中

urityManager(securityManager);

获取当前用户

Subject subject = ject();

创建用户名/密码的Token

UsernamePasswordToken token = new

UsernamePasswordToken("admin", "admin");

try {

登录认证

(token);

认证成功

n("认证成功");

} catch (AuthenticationException e) {

认证失败

n("认证失败:" + sage());

}

}

}

在这个示例中,首先创建了一个SecurityManager,然后设置Realm,并将SecurityManager设置到当前环境中。之后,通过SecurityUtils获

取Subject对象,创建一个UsernamePasswordToken,并调用方法进行认证操作。

总结:

基本认证是一种保护网络资源的常用认证方式,通过在HTTP请求头中添加凭证信息,来验证用户的身份。Apache Shiro是一个强大的安全框架,可以帮助我们实现基本认证功能,它提供了一套完整的认证和授权解决方案。通过配置Shiro的Realm和使用Shiro的Subject对象,我们可以轻松地实现基本认证功能,并提供安全的访问控制。


本文标签: 认证 进行 用户 凭证