您的位置:首页 > 其它

shiro权限控制

2020-08-05 23:40 549 查看

1.shiro权限管理
1.新建shiroConfiguration类,与po、vo包同级

@Configuration
public class ShiroCinfiguration {

//创建realm
@Bean
public NewsRealm getRealm(){return new NewsRealm();}

//创建安全管理器
@Bean
public SecurityManager securityManager(NewsRealm realm){
//使用默认的安全管理器
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm);
//将自定义realm交给安全管理器统一调度管理
return securityManager;
}

//配置shiroguol器工厂
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactory = new ShiroFilterFactoryBean();
shiroFilterFactory.setSecurityManager(securityManager);
//通用配置
shiroFilterFactory.setLoginUrl("/admin");
shiroFilterFactory.setUnauthorizedUrl("/admin");
/*
* key:请求路径
* value:过滤器类型
* */
Map<String,String> filterMap = new LinkedHashMap<>();
filterMap.put("/admin/types","perms[user-types]");
filterMap.put("/admin/news","perms[user-news]");
filterMap.put("/admin/tags","perms[user-tags]");
filterMap.put("/admin/login","anon");
filterMap.put("/admin/**","authc");
System.out.println(filterMap);
//设置过滤器
shiroFilterFactory.setFilterChainDefinitionMap(filterMap);
return shiroFilterFactory;

}
//开启shiro注解支持
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(securityManager);
return advisor;
}
}

2.建立role实体类

@Entity
@Table(name="t_role")
public class Role implements Serializable {
private static final long serialVersionUID = 2057484709089375773L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;

@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<>(0);

@ManyToMany(fetch = FetchType.EAGER)
private Set<Permission> permissions = new HashSet<>(0);
}

3.建立permission实体类

@Entity
@Table(name="t_permission")
public class Permission implements Serializable{
private static final long serialVersionUID = 423698596935410559L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String code;
private String description;
}

5.logincontroller类修改

@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password,
HttpSession session, RedirectAttributes attributes){
try{
//构造登陆令牌
UsernamePasswordToken upToken = new UsernamePasswordToken(username,password);
//获取subject
Subject subject = SecurityUtils.getSubject();
subject.login(upToken);
User user = (User) subject.getPrincipal();
session.setAttribute("user",user);
return "admin/index";
}catch (Exception e){
attributes.addFlashAttribute("message","用户名或密码错误");
return "redirect:/admin";
}
}

2.springcloud eureka
在pom.xml文件中添加以下依赖

tk.mybatis
mapper-spring-boot-starter
2.0.4

5.po包中建立user实体类

@Table(name = “tb_user”)
public class User implements Serializable {
private static final long serialVersionUID = 532052702063464346L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private Date created;
private Date updated;
}

7.mapper包中UserMapper类

@org.apache.ibatis.annotations.Mapper
public interface UserMappper extends Mapper {

}
8.Service包下建立UserService类

@Service
public class UserService {

@Autowired(required = false)
private UserMappper userMappper;

public User queryById(Long id){
return this.userMappper.selectByPrimaryKey(id);
}
}

9在Controller包中新建UserController.类

@RestController
@RequestMapping("user")
public class UserController {

@Autowired
private UserService userService;

@GetMapping("{id}")
public User queryById(@PathVariable("id") Long id){
return this.userService.queryById(id);
}
}

10.对application.yml文件进行数据库连接配置:

server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/db3?useSSL=true&characterEncoding=utf-8
username: root
password: 999
driver-class-name: com.mysql.jdbc.Driver
application:
name: service-provider   #应用名称,注册到eureka后的服务名称
mybatis:
type-aliases-package: com.lc.service.provider.po
eureka:
client:
service-url:  #EurekaServer地址
defaultZone: http://localhost:10086/eureka
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: