当前位置: 首页 > wzjs >正文

网站建设图片素材库网站怎么做企业

网站建设图片素材库,网站怎么做企业,建设一个国外服务器的网站,软件开发工程师面试1、需求 在spring security双token机制实现一文中已经实现了token的校验,在实际的项目中还需要根据用户的角色或用户Id对数据资源进行校验。 例如,有两个项目A和B,张三和李四都是项目实施人员这一角色,张三是项目A的项目组成员&a…

1、需求

在spring security双token机制实现一文中已经实现了token的校验,在实际的项目中还需要根据用户的角色或用户Id对数据资源进行校验。
例如,有两个项目A和B,张三和李四都是项目实施人员这一角色,张三是项目A的项目组成员,李四是项目B的项目组成员,他们只能访问自己所属项目的资源。

2、实现

这里对spring security双token机制实现中的代码进行一部分改造。

2.1 改造TokenAuthenticationFilter

部分公共资源是可以不需要项目的权限就可以访问的,在前面的例子中,比如一些公共的模块(公司组织架构查询,帮助等)。token校验成功后可以将我们请求的资源需要的校验写入上下文中,以便过滤器链处理(代码中的NOTE注释)。

@Component
public class TokenAuthenticationFilter extends OncePerRequestFilter {private UserMapper userMapper;private TokenMapper tokenMapper;private static final Logger logger = LoggerFactory.getLogger(TokenAuthenticationFilter.class);@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {if (userMapper == null) {userMapper = SpringUtils.getBean(UserMapper.class);}if (tokenMapper == null) {tokenMapper = SpringUtils.getBean(TokenMapper.class);}String tokenHeaderStr = request.getHeader("authorization");String token = tokenHeaderStr.substring(7);String userId = authenticateToken(token);if (userId == null || userId.isEmpty()) {logger.error("无效的token");response.setStatus(HttpServletResponse.SC_FORBIDDEN);response.setCharacterEncoding("UTF-8");response.getWriter().write("无效的token");return;}User user = userMapper.findByUserIdWithRole(userId);String requestUri = request.getServletPath();// NOTE: 在上面校验用户的逻辑完成之后可以通过这样的方式将资源权限相关的属性写入Authentication上下文中,这里getNeedProjectAuth()方法获取该接口是否需要校验用户的项目权限List<GrantedAuthority> authorityList =AuthorityUtils.createAuthorityList(user.getRole().getRoleCode(), getNeedProjectAuth(requestUri).toString());// NOTE: 这里将用户的信息写入Authentication上下文Authentication authentication =new UsernamePasswordAuthenticationToken(user, token, authorityList);SecurityContextHolder.getContext().setAuthentication(authentication);filterChain.doFilter(request, response);}// 实现shouldNotFilter方法,设置无需token校验的url@Overrideprotected boolean shouldNotFilter(HttpServletRequest request) {String fullUri = request.getRequestURI();String context_path = request.getContextPath();String uri = fullUri.substring(fullUri.indexOf(context_path) + context_path.length());return Arrays.asList(acceptUrls).contains(uri);}private String authenticateToken(String tokenStr) {Token token = tokenMapper.getTokenByAccessToken(tokenStr);if (token == null) {return null;}LocalDateTime now = LocalDateTime.now();if (token.getAccessExpireTime().isAfter(now)) {return token.getUserId();}return null;}
}

2.2 实现ProjectAuthenticationFilter

校验token成功之后通过ProjectAuthenticationFilter 来校验用户的项目权限,从上下文中读取Authentication,获得项目权限校验信息(根据url判断是否需要校验项目权限,用户是否具有该项目的权限)

@Component
public class ProjectAuthenticationFilter extends OncePerRequestFilter {@Autowiredprivate ProjectUserMapper projectUserMapper;private static final Logger logger = LoggerFactory.getLogger(ProjectAuthenticationFilter.class);@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {Authentication auth = SecurityContextHolder.getContext().getAuthentication();// ADMIN用户可以访问所有的项目资源if (auth.getAuthorities().toArray()[0].toString().toUpperCase().equals("ROLE_ADMIN")) {filterChain.doFilter(request, response);} else {/*** 获取用户是否有请求项目资源的权限,方法略*/filterChain.doFilter(request, response);}}// 在这里判断是否需要校验权限@Overrideprotected boolean shouldNotFilter(HttpServletRequest request) {// NOTE:从上下文中获取Authentication ,根据接口所需资源情况判断是否需要校验用户的项目权限Authentication auth = SecurityContextHolder.getContext().getAuthentication();boolean needProjectAuth = Boolean.parseBoolean(auth.getAuthorities().toArray()[1].toString());return !needProjectAuth;}
}

2.3 按校验顺序注册过滤器

这里需要改造下spring security配置类,按照恰当的顺序注册过滤器链(代码中的NOTE注释)。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate TokenAuthenticationFilter tokenAuthenticationFilter;@Autowiredprivate ServiceAuthenticationFilter serviceAuthenticationFilter;@Overrideprotected void configure(HttpSecurity http) throws Exception {// NOTE:先经过token校验过滤器,再经过项目校验过滤器http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().addFilterBefore(tokenAuthenticationFilter, BasicAuthenticationFilter.class).addFilterAfter(projectAuthenticationFilter, TokenAuthenticationFilter.class).sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

文章转载自:

http://IbrbrH95.grcdt.cn
http://VDfgIGgc.grcdt.cn
http://kNgEM25V.grcdt.cn
http://RMuhNhlC.grcdt.cn
http://1t07xq8c.grcdt.cn
http://yS36zkEC.grcdt.cn
http://lnJ6EIBk.grcdt.cn
http://co9r50HR.grcdt.cn
http://yGJ1Vy2p.grcdt.cn
http://6temIo1u.grcdt.cn
http://GZPhroEn.grcdt.cn
http://ZlWygi1K.grcdt.cn
http://Qfbuv1CR.grcdt.cn
http://vm1LVNqi.grcdt.cn
http://b0VmHV2h.grcdt.cn
http://vXr4urOC.grcdt.cn
http://tpXX3A0Z.grcdt.cn
http://ISh63Lat.grcdt.cn
http://GF6CpiGv.grcdt.cn
http://DrhRLCKi.grcdt.cn
http://VvK8Exzk.grcdt.cn
http://U8KboqpD.grcdt.cn
http://BmGUx9uP.grcdt.cn
http://AGPPcz3o.grcdt.cn
http://OfjY2S1V.grcdt.cn
http://1gCqPSaM.grcdt.cn
http://KYKH9IYr.grcdt.cn
http://przevGb5.grcdt.cn
http://pcgLFSXs.grcdt.cn
http://XZBPOuUD.grcdt.cn
http://www.dtcms.com/wzjs/745824.html

相关文章:

  • 营销网站更受用户欢迎的原因是做调研用到的大数据网站
  • 虚拟服务器建网站做优化网站建设
  • 金融网站cms多媒体网页设计
  • 网站建设需要知道什么做服装广告素材网站有哪些
  • led 网站建设产品软文是什么
  • 学网站开发多久小程序商城模板免费
  • 网站建设的技术亮点网站建设专家cms
  • 汽车城网站建设方案上海做原创网站
  • 国内买机票最便宜网站建设产品网站开发计划表
  • 做网站多久学会有网站源代码 怎么样建设网站
  • 建设银行瓶窑支行网站小工厂如何找外贸公司合作
  • 库尔勒网站cn.wordpress.org
  • kuake自助建站系统官网做网站可以赚钱吗
  • 怎么建设两个大淘客网站企业vi是什么意思
  • 网站开发实战项目做网站用什么语言制作最安全?
  • 淮安建设工程协会网站查询easyphp wordpress
  • 浏阳网站制作公司wordpress转中文
  • 国企网站建设的意义重庆网红打卡地
  • 网站 备案 几天html5个人网站源码
  • 大连网站制作 连城传媒服装企业微网站建设
  • 网站评估 源码网站建设与百度推广
  • 义乌城市建设规划网站12345可以咨询房产问题吗
  • 网站建设最重要的环节网站开发类合同
  • 微企业网站模板免费织梦网站支付安装
  • 打开网站弹出广告代码湖南建设人才网官网
  • 大理做网站建设读书网站的意义
  • wordpress站群版无锡手机网站建设服务
  • 网站建设评价指标google中文搜索引擎
  • 创建公司网站内容总结学做宝宝衣服的网站
  • 用织梦做的网站 图片打开很慢厦门网站建设和人才库建设