具体内容
连接数据库操作操作
用户表:
角色表:
菜单表:
用户角色表:
角色菜单表:
3.1 整合mp
pom文件:
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 4.1导入pom的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!--lomnok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
application.properties文件
#spring.security.user.name=yyl
#spring.security.user.password=yyl
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///securitydb?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
#
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-date-keys-as-timestamps=false
#logging.level.com.baomidou.ant.test.dao=debug
#mybatis-plus
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#mybatis-plus.configuration.log-impl=
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
#逻辑删除 删除之前的值是0 之后是1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
mybatis-plus.global-config.db-config.logic-delete-value=1
3.2 修改UserDetailsService实现类
UserDetailsService的实现类:
package com.example.securitydemo.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.securitydemo.entity.TabRole;
import com.example.securitydemo.entity.TabRoleUser;
import com.example.securitydemo.entity.TabUser;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class MyUserService implements UserDetailsService {
@Resource
private TUserMapper userMapper;
@Resource
private TUserRoleMapper userRoleMapper;
@Resource
private TRoleMenuMapper roleMenuMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//根据用户的名字查询用户的信息
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("username",username);
TUser tUser = userMapper.selectOne(queryWrapper);
if (tUser ==null){
throw new BadCredentialsException("用户不存在!!!");
}else{
// 根据用户的信息 查询角色的信息 放到资源里面
List<TRole> trole = userRoleMapper.getRoleByUid(tUser.getId());
List<SimpleGrantedAuthority> collect = trole.stream().map(tRole -> new SimpleGrantedAuthority("ROLE_"+tRole.getRname())).collect(Collectors.toList());
// 根据用户的角色信息 查询用户的
List<Integer> rlist = trole.stream().map(tRole -> tRole.getId()).collect(Collectors.toList());
List<TMenu> menuList = roleMenuMapper.getMenusByRids(rlist);
// 根据角色的信息查询资源的信息 放到角色里面
List<SimpleGrantedAuthority> collect1 = menuList.stream().map(tMenu -> new SimpleGrantedAuthority(tMenu.getMname())).collect(Collectors.toList());
List<SimpleGrantedAuthority> allAuth = Stream.concat(collect1.stream(), collect.stream()).collect(Collectors.toList());
User user = new User(tUser.getUsername(),tUser.getPassword(),allAuth);
return user;
}
}
}
3.3 修改配置文件
防止启动报错,将配置文件修改如下:
@Bean
public UserDetailsService getUserService(){
return new MyUserService();
}
// 注入password的bean
@Bean
public PasswordEncoder getPassword(){
return new BCryptPasswordEncoder();
}
3.4 整合jsp
pom文件
<!--jsp-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--jsp使用安全框架的标签-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>