Shiro 添加基于表单的登录:
时间: 2023-06-24 22:09:08 浏览: 45
要添加基于表单的登录,您需要执行以下步骤:
1. 创建一个登录页面,该页面包含用户名和密码字段以及提交按钮。
2. 在 Shiro 配置文件中,将登录页面的 URL 映射到 Shiro 过滤器链中的 `authc` 过滤器。
3. 在 Shiro 配置文件中,指定用于验证用户凭据的 Realm。
4. 在 Realm 中实现验证逻辑,以验证用户提供的用户名和密码是否与存储在系统中的凭据匹配。
以下是一个简单的示例:
1. 在 JSP 页面中添加一个表单:
```html
<form action="/login" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
```
2. 在 Shiro 配置文件中,将登录页面的 URL 映射到 `authc` 过滤器:
```ini
[urls]
/login = authc
```
3. 在 Shiro 配置文件中,指定用于验证用户凭据的 Realm:
```ini
[main]
myRealm = com.example.MyRealm
[security]
authc.loginUrl = /login
```
4. 在 Realm 中实现验证逻辑:
```java
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// not needed for login
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
String password = new String(upToken.getPassword());
// TODO: validate username and password against database or other data store
return new SimpleAuthenticationInfo(username, password, getName());
}
}
```
在这个例子中,`MyRealm` 类继承了 `AuthorizingRealm`,并实现了 `doGetAuthenticationInfo` 方法。在这个方法中,我们从传入的 `AuthenticationToken` 中获取用户名和密码,并将其与存储在系统中的凭据进行比较。如果它们匹配,我们就返回一个 `SimpleAuthenticationInfo` 对象,该对象包含用户名、密码和 Realm 名称。
完成以上步骤后,您应该可以使用基于表单的登录来保护您的应用程序资源了。