前置路由守卫:就是在路由跳转前加上自己的一些业务代码,未登录之前输入其他路径,不放行,跳转至登录页面。
在main.js文件中加入以下代码
//把axios挂载到vue对象中,以后在vue中如果使用axios直接可以使用$http名称
Vue.prototype.$http = axios
//设置前置路由守卫 to:表示跳转至哪个路由,from:从哪个路由来,next:放行到指定路由
router.beforeEach((to, from, next) => {
//获得跳转的路径
var path = to.path;
//是否为登录路由路径
console.log(path==="/login");
if (path==="/login"){
//放行
return next();
}
//其他路由路径,判断是否登录
var token = sessionStorage.getItem("token");
if (token){
return next();
}
//跳转至登录
return next("/login");
console.log("这里是前置路由守卫")
})
2、整合shiro安全框架
2.1 依赖
2.2 shiro配置类org.apache.shiro shiro-spring-boot-starter1.7.0
@Configuration
public class ShiroConfig {
@Bean
public DefaultWebSecurityManager defaultWebSecurityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm());
return securityManager;
}
@Bean
public Realm realm(){
MyRealm myRealm = new MyRealm();
myRealm.setCredentialsMatcher(credentialsMatcher());
return myRealm;
}
@Bean
public CredentialsMatcher credentialsMatcher(){
HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
hashedCredentialsMatcher.setHashAlgorithmName("MD5");
hashedCredentialsMatcher.setHashIterations(1024);
return hashedCredentialsMatcher;
}
@Bean(value = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean(){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager());
Map map = new HashMap<>();
map.put("/login","anon");
map.put("/doc.html","anon");
map.put("/swagger-ui.html", "anon");
map.put("/webjars
overflow-y: auto;
}
.el-aside>.el-menu{
border: 0px;
}
.el-main {
background-color:#F2F2F2;
color: #333;
text-align: center;
padding: 0px 16px !important;
height: calc(100vh - 61px);
overflow-y: auto;
}
body > .el-container {
margin-bottom: 40px;
}
.el-container:nth-child(5) .el-aside,
.el-container:nth-child(6) .el-aside {
line-height: 260px;
}
.el-container:nth-child(7) .el-aside {
line-height: 320px;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
4、退出功能
4.1 设置axios的基础路径
//设置axios的基础路径 axios.defaults.baseURL="http:localhost:8081";4.2 前端
handleCommand(command){
if (command=="exit"){
axios.get("/exit").then(result=>{
if (result.data.code==2000){
this.$message.success(result.data.msg);
sessionStorage.clear();
this.$router.push("/login")
}
})
}
},
4.3 后端
@GetMapping("/exit")
public CommonResult exit(HttpServletRequest request){
String token = request.getHeader("token");
if (redisTemplate.hasKey(token)){
redisTemplate.delete(token);
return new CommonResult(2000,"退出成功",null);
}
return new CommonResult(5000,"无效的token",null);
}
5、获取左侧菜单
5.1 前端
//左侧菜单栏
initLeftMenu(){
this.$http.get("/permission/leftMenu").then(result=>{
if (result.data.code===2000){
this.leftMenu = result.data.data;
}
})
},
5.2 controller层
@RestController
@RequestMapping("/permission")
public class PermissionController {
@Autowired
private IPermissionService iPermissionService;
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/leftMenu")
public CommonResult leftMenu(HttpServletRequest request){
String token = request.getHeader("token");
ValueOperations valueOperations = redisTemplate.opsForValue();
User user = (User) valueOperations.get(token);
String id = user.getId();
List list = iPermissionService.selectPermissionByUserId(id);
if (list.size()>0){
return new CommonResult(2000,"左侧菜单查询成功",list);
}
return new CommonResult(5000,"查询失败",null);
}
}
5.3 Permission.xml文件
5.4 service的实现类
@Service public class PermissionServiceImpl extends ServiceImpl5.5 前端根据返回结果显示层级关系implements IPermissionService { @Autowired private PermissionMapper permissionMapper; @Override public List selectPermissionByUserId(String id) { List permissions = permissionMapper.selectPermissionByUserId(id); ArrayList firstMenus = new ArrayList<>(); for (Permission p:permissions) { if (p.getPid().equals("1")){ firstMenus.add(p); } } //为一级菜单设置二级菜单 for (Permission first:firstMenus) { //根据一级菜单id 查询 该菜单得二级菜单。如果出现不确定有几级菜单 那么我们可以使用方法得递归调用 first.setChildren(findChildren(permissions,first.getId())); } return firstMenus; } //递归方法 List findChildren(List permissions,String id){ ArrayList children = new ArrayList<>(); for (Permission p : permissions) { if (p.getPid().equals(id)){ children.add(p); } } for (Permission child:children){ child.setChildren(findChildren(permissions,child.getId())); } return children; } }
{{firstMenu.name}} {{secondMenu.name}}



