用shiro写一个用户登录的案例
时间: 2023-05-22 14:05:52 浏览: 70
好的,以下是使用shiro框架编写用户登录的示例代码:
在pom.xml文件中添加shiro相关的依赖:
```xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.5.3</version>
</dependency>
```
在web.xml文件中配置shiro过滤器,处理登录和权限相关的请求:
```xml
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
在shiro.ini文件中配置shiro的相关属性,包括身份验证器、权限验证器等:
```ini
[main]
# 设置身份验证器
authc = org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authc.loginUrl = /login.jsp
authc.successUrl = /index.jsp
# 设置权限验证器
perms = org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
# 配置角色和权限的对应关系
[roles]
admin = *
[urls]
/login.jsp = authc
/logout = logout
/index.jsp = authc, perms["admin"]
```
在登录页面(例如login.jsp)中,可以使用shiro标签库来进行用户登录的验证:
```jsp
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<%-- 显示登录错误信息 --%>
<c:if test="${not empty shiroLoginFailure}">
<div class="alert alert-danger">${shiroLoginFailure}</div>
</c:if>
<%-- 显示登录表单 --%>
<form method="post" action="<s:url value='/login'/>">
<p>
<label>用户名:</label>
<input type="text" name="username"/>
</p>
<p>
<label>密码:</label>
<input type="password" name="password"/>
</p>
<p>
<button type="submit">登录</button>
</p>
</form>
```
在登录请求的处理方法(例如LoginController.java)中,需要使用shiro来完成用户登录验证的相关操作:
```java
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(String username, String password) {
// 获取当前主体
Subject currentUser = SecurityUtils.getSubject();
// 封装用户名和密码
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
// 尝试进行登录验证
try {
currentUser.login(token);
return "redirect:/index";
} catch (AuthenticationException e) {
e.printStackTrace();
return "redirect:/login?error=true";
}
}
@GetMapping("/logout")
public String logout() {
// 获取当前主体
Subject currentUser = SecurityUtils.getSubject();
// 尝试进行登出操作
try {
currentUser.logout();
} catch (AuthenticationException e) {
e.printStackTrace();
}
return "redirect:/login";
}
}
```
此处是一个简单的使用shiro框架完成用户登录验证的示例,如果需要进行更为复杂的权限控制,可以在shiro.ini文件中配置更多的角色和权限,并在请求处理方法中使用shiro标签库进行权限验证。