shiro解决csrf
时间: 2023-12-05 09:40:29 浏览: 196
Shiro可以通过在表单中添加CSRF Token来防止CSRF攻击。CSRF Token是一个随机生成的字符串,它被嵌入到表单中,然后在表单提交时一起发送到服务器。服务器会验证这个Token是否合法,如果不合法则拒绝请求。
下面是使用Shiro防止CSRF攻击的步骤:
1.在表单中添加CSRF Token
```html
<form method="post" action="/submit">
<input type="hidden" name="csrfToken" value="$csrfToken">
<!-- 其他表单元素 -->
<button type="submit">提交</button>
</form>
```
2.在Shiro配置文件中启用CSRF防护
```ini
[main]
# 配置CSRF防护过滤器
csrf = org.apache.shiro.web.filter.authc.CsrfFilter
# 配置Shiro过滤器链
authc = org.apache.shiro.web.filter.authc.FormAuthenticationFilter
perms = org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
roles = org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
logout = org.apache.shiro.web.filter.authc.LogoutFilter
anon = org.apache.shiro.web.filter.authc.AnonymousFilter
filterChainDefinitions = /** = anon
/login = authc
/logout = logout
/submit = csrf, authc
```
3.在Controller中验证CSRF Token
```java
@PostMapping("/submit")
public String submit(@RequestParam("csrfToken") String csrfToken, /* 其他参数 */) {
// 验证CSRF Token是否合法
if (!csrfToken.equals(getSession().getAttribute("csrfToken"))) {
throw new RuntimeException("CSRF Token不合法");
}
// 处理表单提交
// ...
}
```
阅读全文