13-shiro整合springboot实现项目中的认证和退出
(1)编写controller
package com.study.springboot_jsp_shiro.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 用来处理身份认证过
* @param username
* @param password
* @return
*/
@RequestMapping("/login")
public String login(String username, String password){
/*
注意,我们以前不在web环境中时,需要给安全工具类注入安全管理器
但是在web环境中,只要我们创建了安全管理器,就会自动给我们的安全工具类注入我们的安全管理器,所以这里不需要再给我们的安全工具类注入我们的安全管理器了
*/
//获取主体对象
Subject subject = SecurityUtils.getSubject();
try {
subject.login(new UsernamePasswordToken(username, password));
return "redirect:/index.jsp";
}catch (UnknownAccountException e){
e.printStackTrace();
System.out.println("用户名错误");
}catch (IncorrectCredentialsException e){
e.printStackTrace();
System.out.println("密码错误");
}
return "redirect:/login.jsp";
}
}
(2)编写我们的登录页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--公共资源-->
<h1>用户登录</h1>
<form action="${pageContext.request.contextPath}/user/login" method="post">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit" value="登录"> <br>
</form>
</body>
</html>
(3)测试
发现我们登录的时候,会走我们的自定义的realm,由于我们自定义realm返回的是null,所以不会登录成功,只会报错:用户名错误。
(4)编写我们的自定义realm(未连接数据库)

这样就可以正确登录了
(5)退出登录设置。
编写主页

编辑controller

/
/
/
/
/
/
(6)一般,我们的所有资源都要进行认证才可以,所以我们修改我们的配置类代码
注意设置一些不受限的资源,并且要把代码放在受限资源的上方,比如我们的登录页面就是不受限资源,不然永远也登录不上去


浙公网安备 33010602011771号