創建SpringBoot項目。
導入依賴:
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
配置application.yml
spring:
datasource:
username: root
password: 154269564
#時區報錯----》serverTimezone=UTC
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
#指定數據庫類型
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則導入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
thymeleaf:
cache: false
#配置mybatis
mybatis:
type-aliases-package: com.qi.pojo
mapper-locations: classpath:mapper/*.xml
創建實體類User
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
創建Dao層
@Mapper
@Repository
public interface UserMapper {
User queryUserByName(String name);
}
創建service層
@Service
@Resource
public class UserService {
@Autowired
private UserMapper userMapper;
public User queryUserByName(String name){
return userMapper.queryUserByName(name);
}
}
創建Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qi.Dao.UserMapper">
<select id="queryUserByName" parameterType="String" resultType="User">
select * from user where name = #{name}
</select>
</mapper>
測試Mybatis:
@SpringBootTest
class Spring07ShiroApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
System.out.println(userService.queryUserByName("sdf"));
}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qg4nNlnp-1588822311579)(SpringBoot.assets/image-20200507112651420.png)]
連接數據庫成功。
部分前端頁面:
<h1>
登錄頁面
</h1>
<p th:text="${msg}" style="color: red"></p>
<form th:action="@{/login}" method="post">
用戶名:<input type="text" name="username"/>
密碼:<input type="text" name="pwd"/>
<input type="submit" value="登錄">
</form>
Controller層:
//獲取用戶名和密碼
@RequestMapping("/login")
public String login(String username, String pwd, Model model){
//獲取當前用戶
Subject subject = SecurityUtils.getSubject();
//封裝用戶登錄信息
UsernamePasswordToken token = new UsernamePasswordToken(username, pwd);
try {
subject.login(token);
return "index";
}catch (UnknownAccountException e){
model.addAttribute("msg","用戶名錯誤");
return "login";
}catch (IncorrectCredentialsException e){
model.addAttribute("msg","密碼錯誤");
return "login";
}
}
shrio的認證管理:
public class UserRealm extends AuthorizingRealm {
@Autowired
UserService userService;
//授權
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("執行了授權--->doGetAuthorizationInfo");
return null;
}
//認證
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken Token) throws AuthenticationException {
System.out.println("執行了認證--->doGetAuthorizationInfo");
UsernamePasswordToken token = (UsernamePasswordToken) Token;
//連接真實數據庫
User user = userService.queryUserByName(token.getUsername());
if(user==null){
return null;//拋出異常:UnknownAccountException
}
//密碼驗證,交給shiiro做
//加密: md5:3def184ad8f4755ff269862ea77393dd
// md5鹽值加密:3def184ad8f4755ff269862ea77393dd+username
System.out.println(user);
return new SimpleAuthenticationInfo("",user.getPwd(),"");
}
}
之後可以對密碼進行MD5加密。