pom文件
<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>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
配置文件
mybatis.type-aliases-package=com.demo.entity
mybatis.mapper-locations=classpath:mapper/**.xml
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=
spring.datasource.password=
spring.datasource.url=
实体类
/**
* (EUser)表实体类
*
* @author demo
* @since 2021-01-19 13:54:35
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "用户对象")
public class EUser extends Model<EUser> {
private Integer uId;
private String uNo;
private Integer uRole;
private String uUsername;
private String uPassword;
private String uHomeAddress;
private String uNowAddress;
private String uPhone;
private String uSalt;
private Date uCreateTime;
private Date uUpdateTime;
}
/**
* (ERole)表实体类
*
* @author demo
* @since 2021-01-19 13:54:26
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class ERole extends Model<ERole> {
private Integer rId;
private String eName;
private List<EPerms> perms;
}
控制层
@ApiOperation("用户注册")
@PostMapping("register")
public ApiRestResponse register(@RequestBody EUser eUser){
try {
eUserService.register(eUser);
return ApiRestResponse.success();
} catch (Exception e) {
e.printStackTrace();
return ApiRestResponse.error(MyExceptionEnum.REGISTE_FAIL);
}
}
@ApiOperation("用户登录")
@PostMapping("login")
public ApiRestResponse login(String username,String password){
//获取主体对象
Subject subject = SecurityUtils.getSubject();
try {
subject.login(new UsernamePasswordToken(username,password));
return ApiRestResponse.success();
} catch (UnknownAccountException e) {
e.printStackTrace();
return ApiRestResponse.error(MyExceptionEnum.WRONG_USERNAME);
} catch (IncorrectCredentialsException e){
e.printStackTrace();
return ApiRestResponse.error(MyExceptionEnum.WRONG_PASSWORD);
}
}
@ApiOperation("退出登陆")
@RequestMapping("logout")
public ApiRestResponse logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return ApiRestResponse.success();
}
业务逻辑层
public void register(EUser eUser) {
//处理业务
//md5+dalt+hash散列
String salt = SaltUtils.getSalt(8);
eUser.setUSalt(salt);
Md5Hash md5Hash = new Md5Hash(eUser.getUPassword(),salt,1024);
eUser.setUPassword(md5Hash.toHex());
eUserDao.insert(eUser);
}
@Autowired(required = false)
private ERoleDao eRoleDao;
@Override
public List<ShiroPerms> findPermsByRoleId(Integer id) {
return eRoleDao.findPermsByRoleId(id);
}
realm中的授权
public class CustomerRealm extends AuthorizingRealm {
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
EUserService eUserService = (EUserService) ApplicationContextUtils.getBean("eUserService");
ERoleService eRoleService = (ERoleService) ApplicationContextUtils.getBean("eRoleService");
ShiroUser shiroUser = eUserService.findRolesByUserName(primaryPrincipal);
//授权角色信息
if (!CollectionUtils.isEmpty(shiroUser.getRoles())){
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
shiroUser.getRoles().forEach(shiroRole -> {
simpleAuthorizationInfo.addRole(shiroRole.getRName());
//权限信息
List<ShiroPerms> perms = eRoleService.findPermsByRoleId(shiroRole.getRId());
if (!CollectionUtils.isEmpty(perms)){
perms.forEach(shiroPerms -> {
simpleAuthorizationInfo.addStringPermission(shiroPerms.getPName());
});
}
});
return simpleAuthorizationInfo;
}
return null;
}
//验证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
String principal = (String) authenticationToken.getPrincipal();
EUserService eUserService = (EUserService) ApplicationContextUtils.getBean("eUserService");
EUser shiroUser = eUserService.findByUserName(principal);
if(!ObjectUtils.isEmpty(shiroUser)){
return new SimpleAuthenticationInfo(shiroUser.getUUsername(),shiroUser.getUPassword(),
ByteSource.Util.bytes(shiroUser.getUSalt()),this.getName());
}
return null;
}
}
Comments | NOTHING