前后端分离

后端架构

后端主要是利用shiro 来完成的,这个是OAuth2Filter链进行过滤

  1. @Override
  2. protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
  3. //获取请求token
  4. String token = getRequestToken((HttpServletRequest) request);
  5. if(StringUtils.isBlank(token)){
  6. return null;
  7. }
  8. return new OAuth2Token(token);
  9. }
  10. /**
  11. * 获取请求的token,用于后面的用途
  12. */
  13. private String getRequestToken(HttpServletRequest httpRequest){
  14. //从header中获取token
  15. String token = httpRequest.getHeader("token");
  16. //如果header中不存在token,则从参数中获取token
  17. if(StringUtils.isBlank(token)){
  18. token = httpRequest.getParameter("token");
  19. }
  20. return token;
  21. }

而springboot里面有对除去匿名的全部要进行过滤,这个在shiro的配置之中。 类 com.bingo.config.ShiroConfig 之中

  1. @Bean("shiroFilter")
  2. public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
  3. ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
  4. shiroFilter.setSecurityManager(securityManager);
  5. //oauth过滤
  6. Map<String, Filter> filters = new HashMap<>();
  7. filters.put("oauth2", new OAuth2Filter()); //这里做设置
  8. shiroFilter.setFilters(filters);
  9. Map<String, String> filterMap = new LinkedHashMap<>();
  10. filterMap.put("/webjars/**", "anon");
  11. filterMap.put("/druid/**", "anon");
  12. filterMap.put("/app/**", "anon");
  13. filterMap.put("/sys/login", "anon");
  14. filterMap.put("/swagger/**", "anon");
  15. filterMap.put("/v2/api-docs", "anon");
  16. filterMap.put("/swagger-ui.html", "anon");
  17. filterMap.put("/swagger-resources/**", "anon");
  18. filterMap.put("/captcha.jpg", "anon");
  19. filterMap.put("/getCode", "anon");
  20. filterMap.put("/**", "oauth2");
  21. shiroFilter.setFilterChainDefinitionMap(filterMap);
  22. return shiroFilter;
  23. }

当然还有写到配置文件中的做法 ,可以思考下怎么做到。

权限的加载以及验证 com.bingo.modules.sys.oauth2.OAuth2Realm

前端架构