@RefreshScope @Configuration public class CasConfiguration extends CasClientConfigurerAdapter { private final static Logger log = LoggerFactory.getLogger(CasConfiguration.class); @Autowired private CasProperties casProperties; @Autowired(required = false) private DebugUserService debugUserService; @Override public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) { super.configureAuthenticationFilter(authenticationFilter); if (casProperties.getUrlPatterns() != null) { authenticationFilter.setUrlPatterns(casProperties.getUrlPatterns()); } else { log.warn("没有设置gate.cas.url-patterns,使用: [/*]"); authenticationFilter.setUrlPatterns(Collections.singletonList("/*")); } AuthenticationFilter authFilter = (AuthenticationFilter) authenticationFilter.getFilter(); authFilter.setIgnoreUrlPatternMatcherStrategyClass(new UrlPatternMatcherStrategy() { @Override public boolean matches(String s) { // s: http://JCODE-PC.lan:8080/actuator/health // s: http://localhost:8080/test // 开启调试时忽略所有拦截 if (debugUserService != null && debugUserService.inDebugMode()) { return true; } return ignoreUrlPatterns(s); } @Override public void setPattern(String s) { log.debug("CAS UrlPatternMatcherStrategy set pattern: {}", s); } }); } public boolean ignoreUrlPatterns(String requestUri) { List<String> ignoreUrlPatterns = casProperties.getIgnoreUrlPatterns();//忽略包括哪些路径 if (ignoreUrlPatterns.size() == 0) { return false; } for (String pattern : ignoreUrlPatterns) { if (requestUri.contains(pattern)) { return true; } } return false; } }详解该代码

时间: 2024-03-29 18:34:26 浏览: 14
这段代码是一个基于Spring Boot框架的Cas客户端配置类,其中使用了@Configuration和@RefreshScope注解来标识这是一个配置类,并且支持动态刷新配置。该类继承了CasClientConfigurerAdapter类,覆盖了其中的configureAuthenticationFilter()方法,来配置Cas客户端的认证过滤器。 在该方法中,首先通过@Autowired注解注入了CasProperties和DebugUserService两个类的实例,用于读取Cas客户端的配置和判断是否处于调试模式。然后根据CasProperties中配置的URL路径模式,设置了认证过滤器的URL路径。 接下来,该方法使用了一个匿名内部类来实现了UrlPatternMatcherStrategy接口,来判断是否忽略某些URL路径,如果debugUserService不为空且处于调试模式,则忽略所有拦截。最后,该类还提供了一个ignoreUrlPatterns()方法,用于判断是否忽略某些URL路径。
相关问题

@Controller @RequestMapping("/payLogs") public class PayLogsController extends BaseController { protected static final Logger Log = LoggerFactory.getLogger(PayLogsController.class); @Autowired private CacheHandle cacheHandle; @Autowired private UsersService usersService; @Autowired private PayLogsService payLogsService; @RequestMapping("") public String index() { return "pages/PayLogs"; }

这是一个使用 Spring MVC 框架开发的 Java 后端控制器,用于处理支付记录相关的请求。该控制器使用 @Controller 注解,表示它是一个控制器类;使用 @RequestMapping 注解,表示该控制器处理的请求路径是 /payLogs。 该控制器有三个成员变量,分别是 CacheHandle、UsersService 和 PayLogsService。CacheHandle 用于管理缓存,UsersService 用于管理用户信息,PayLogsService 用于管理支付记录。 该控制器有一个处理 GET 请求的方法,使用 @RequestMapping 注解,并且没有指定具体的请求路径,表示处理的是 /payLogs 这个路径的 GET 请求。该方法返回一个字符串 "pages/PayLogs",表示需要渲染名为 PayLogs 的页面。 由于该方法没有使用 @ResponseBody 注解,因此它会将返回值作为视图名称,传递给视图解析器进行解析。在 Spring MVC 中,视图解析器会将视图名称解析为具体的视图文件路径,然后将该视图文件渲染成 HTML 页面并返回给客户端。

@Controller @RequestMapping("/notices") public class NoticesController extends BaseController { protected static final Logger Log = LoggerFactory.getLogger(NoticesController.class); @Autowired private CacheHandle cacheHandle; @Autowired private NoticesService noticesService; @Autowired private UsersService usersService; @RequestMapping("") public String index() { return "pages/Notices"; } @GetMapping("/info") @ResponseBody public R getInfo(String id) { Log.info("查找指定通知记录,ID:{}", id); Notices notices = noticesService.getOne(id); return R.successData(notices); }

这是一个使用 Spring MVC 框架开发的 Java 后端控制器,用于处理通知相关的请求。该控制器使用 @Controller 注解,表示它是一个控制器类;使用 @RequestMapping 注解,表示该控制器处理的请求路径是 /notices。 该控制器有三个成员变量,分别是 CacheHandle、NoticesService 和 UsersService。CacheHandle 用于管理缓存,NoticesService 用于管理通知信息,UsersService 用于管理用户信息。 该控制器有一个处理 GET 请求的方法,使用 @RequestMapping 注解,并且没有指定具体的请求路径,表示处理的是 /notices 这个路径的 GET 请求。该方法返回一个字符串 "pages/Notices",表示需要渲染名为 Notices 的页面。 另外,该控制器还有一个处理 GET 请求的方法,使用 @GetMapping 注解,并且指定请求路径为 /info。该方法接受一个名为 id 的字符串参数,表示需要查找的通知记录的 ID。该方法使用 @ResponseBody 注解,将返回值以 JSON 格式输出。 该方法首先记录了一条日志,表示正在查找指定的通知记录。然后使用 noticesService.getOne(id) 方法查找指定 ID 的通知记录,并将其封装为一个 R 对象返回。如果查找成功,则 R 对象的状态为成功,并且使用 successData 方法将通知记录作为数据返回。如果查找失败,则 R 对象的状态为失败,并且使用 fail 方法返回失败信息。

相关推荐

@Controller @RequestMapping("/activeLogs") public class ActiveLogsController extends BaseController { protected static final Logger Log = LoggerFactory.getLogger(ActiveLogsController.class); @Autowired private CacheHandle cacheHandle; @Autowired private UsersService usersService; @Autowired private ActiveLogsService activeLogsService; @RequestMapping("") public String index() { return "pages/ActiveLogs"; } @GetMapping("/info") @ResponseBody public R getInfo(String id) { Log.info("查找指定报名记录,ID:{}", id); ActiveLogs activeLogs = activeLogsService.getOne(id); return R.successData(activeLogs); } @GetMapping("/list") @ResponseBody public R getList(String activeId) { Log.info("获取指定活动的报名记录,活动ID:{}", activeId); List<Map<String, Object>> list = activeLogsService.getListByActiveId(activeId); return R.successData(list); } @PostMapping("/add") @ResponseBody public R addInfo(String token, ActiveLogs activeLogs) { Users user = usersService.getOne(cacheHandle.getUserInfoCache(token)); if(activeLogsService.isActive(activeLogs.getActiveId(), user.getId())){ activeLogs.setId(IDUtils.makeIDByCurrent()); activeLogs.setUserId(user.getId()); activeLogs.setCreateTime(DateUtils.getNowDate()); Log.info("添加报名记录,传入参数:{}", activeLogs); activeLogsService.add(activeLogs); return R.success(); }else{ return R.warn("该活动您已参与,请勿重复报名"); } } @PostMapping("/upd") @ResponseBody public R updInfo(ActiveLogs activeLogs) { Log.info("修改报名记录,传入参数:{}", activeLogs); activeLogsService.update(activeLogs); return R.success(); } @PostMapping("/del") @ResponseBody public R delInfo(String id) { Log.info("删除报名记录, ID:{}", id); ActiveLogs activeLogs = activeLogsService.getOne(id); activeLogsService.delete(activeLogs); return R.success(); } }

package self.cases.teams.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import self.cases.teams.utils.DateUtils; import self.cases.teams.utils.IDUtils; import self.cases.teams.msg.R; import self.cases.teams.msg.PageData; import self.cases.teams.entity.Users; import self.cases.teams.service.UsersService; /** * 系统请求响应控制器 * 系统用户 */ @Controller @RequestMapping("/users") public class UsersController extends BaseController { protected static final Logger Log = LoggerFactory.getLogger(UsersController.class); @Autowired private UsersService usersService; @RequestMapping("") public String index() { return "pages/Users"; } @GetMapping("/info") @ResponseBody public R getInfo(String id) { Log.info("查找指定系统用户,ID:{}", id); Users users = usersService.getOne(id); return R.successData(users); } @GetMapping("/page") @ResponseBody public R getPageInfos(Long pageIndex, Long pageSize, Users users) { Log.info("分页查找系统用户,当前页码:{}," + "每页数据量:{}, 模糊查询,附加参数:{}", pageIndex, pageSize, users); PageData page = usersService.getPageInfo(pageIndex, pageSize, users); return R.successData(page); } @PostMapping("/add") @ResponseBody public R addInfo(Users users) { if(usersService.getUserByUserName(users.getUserName()) == null){ users.setId(IDUtils.makeIDByCurrent()); users.setCreateTime(DateUtils.getNowDate()); Log.info("添加系统用户,传入参数:{}", users); users

最新推荐

recommend-type

HP-Socket编译-Linux

HP-Socket编译-Linux
recommend-type

JavaScript_生活在Discord上的开源社区列表.zip

JavaScript
recommend-type

JavaScript_MultiOn API.zip

JavaScript
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这