1、过滤器:创建CharacterEncodingFilte.java,用来做字符格式转化
package com.zzstxx.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.stereotype.Component; /** * 过滤器 * @author zxf */ @Component @ServletComponentScan @WebFilter(urlPatterns = "/hello1/*",filterName = "CharacterEncodingFilte") public class CharacterEncodingFilte implements Filter { public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; System.out.println("this is MyFilter,url :" + request.getRequestURI()); arg2.doFilter(arg0, arg1); } public void destroy() { // TODO Auto-generated method stub } }
2、监听器
(1)、创建SpringBoot配置类,并注册监听器
package com.zzstxx; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.zzstxx.listener.ListenerTest; /** * 配置管理类 * @author zxf * */ @Configuration public class WebConfig { public WebConfig() { System.out.println("加载SpringBoot配置WebConfig ........."); // TODO Auto-generated constructor stub } /** * 注册监听器 * @return */ @Bean public ServletListenerRegistrationBean<ListenerTest> servletListenerRegistrationBean() { return new ServletListenerRegistrationBean<ListenerTest>(new ListenerTest()); } }
(2)、创建监听器类
package com.zzstxx.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ListenerTest implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("监听器初始化..."); } public void contextDestroyed(ServletContextEvent arg0) { System.out.println("监听器销毁..."); } }
3、错误页面处理
当系统报错时,返回到页面的内容通常是一些杂乱的代码段,这种显示对用户来说不友好,因此我们需要自定义一个友好的提示系统异常的页面。在 src/main/resources 下创建 /public/error(路径是固定的,Spring Boot 会在系统报错时将返回视图指向该目录下的文件),在该目录下再创建一个名为 5xx.html 文件,该页面的内容就是当系统报错(错误代码以5开头的)时返回给用户浏览的内容:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>系统错误</title> <link href="/css/index.css" rel="stylesheet"/> </head> <body> <div class="container"> <h2>系统内部错误</h2> </div> </body> </html>
上边处理的 5xx 状态码的问题,接下来解决 404 状态码的问题。
当出现 404 的情况时,用户浏览的页面也不够友好,因此我们也需要自定义一个友好的页面给用户展示。
在 /public/error 目录下再创建一个名为 404.html 的文件:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>访问异常</title> <link href="/css/index.css" rel="stylesheet"/> </head> <body> <div class="container"> <h2>找不到页面</h2> </div> </body> </html>
4、全局异常捕获
package com.zzstxx.exception; import java.util.HashMap; import java.util.Map; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * 全局异常捕获 * @author zxf * */ @ControllerAdvice public class GlobalDefaultExceptionHandler { /** * 处理 Exception 类型的异常 * * @param e * @return */ @ExceptionHandler(Exception.class) @ResponseBody public Map<String, Object> defaultExceptionHandler(Exception e) { Map<String, Object> map = new HashMap<String, Object>(); map.put("code", 500); map.put("msg", e.getMessage()); return map; } }
5、解决跨域的问题:
测试请求链接:http://localhost:8080/fastjson/test2
(1)、方式一
@Configuration public class WebConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { //fastjson为请求路径的一部分 registry.addMapping("/fastjson/**") .allowedOrigins("http://localhost:8088");// 允许 8088 端口访问 } }; } }(2)、方式二
@Configuration public class WebConfig extends WebMvcConfigurerAdapter{ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/fastjson/**") .allowedOrigins("http://localhost:8088");// 允许 8088 端口访问 } }(3)、细粒度控制
在 FastJsonController 类中的方法上添加 @CrossOrigin(origins="xx") 注解:
@RequestMapping("/test") @CrossOrigin(origins="http://localhost:8088") public User test() { User user = new User(); user.setId(1); user.setUsername("jack"); user.setPassword("jack123"); user.setBirthday(new Date()); return user; }在使用该注解时,需要注意 @RequestMapping 使用的请求方式类型,即 GET 或 POST。
相关推荐
Spring Boot提供了一种解决方案,即通过`@CrossOrigin`注解或者全局配置CORS过滤器,允许特定的跨域请求。 5. **Gradle和Maven**: Gradle和Maven都是Java项目构建工具,Gradle以其强大的Groovy DSL和灵活的依赖管理...
2. 过滤器:提供四大类过滤器,包括:wall(防火墙)、proxy(代理)、stat(统计)、log4j(日志)。 3. 支持DruidStatViewServlet和DruidStatFilter,方便进行监控。 4. 防SQL注入:内置.wall Filter,可以防止SQL...
接下来,配置Shiro的主要设置,包括过滤器链定义,如登录、登出、访问无权限页面时的处理。例如,我们可以设置`/login`路由使用`authc`过滤器进行登录验证,`/logout`路由使用`logout`过滤器实现用户登出,而其他受...
2. **Filter配置**:配置Shiro的过滤器链,指定哪些请求应该通过哪些过滤器处理。这通常在SpringBoot的配置类中完成。 3. **安全拦截器**:在SpringBoot的Web层,可以使用Shiro的`@ShiroAnnotationsProcessor`来...
这些过滤器处理用户的请求,如登录验证、权限检查等。 在实际应用中,我们可能还需要实现权限的动态加载,即在用户登录后,根据角色从数据库动态获取权限列表,这样可以应对权限变更的需求。 总的来说,这个实例...
- 配置`FilterRegistrationBean`和`ServletListenerRegistrationBean`来注册CAS的过滤器和监听器到Spring Boot的Web应用中。 4. **Shiro配置文件**: 通常还需要一个名为`shiro.ini`或`shiro.xml`的配置文件,...
搭建spring boot 项目 研究基于注解Aspct面向方向编程、自定义异常处理Exception、Interceptor 拦截器 拦截禁止跨域请求、springboot的常用的监听器Listener、过滤器filter。
过滤器 适配器 aop 二维码生成 app包解析工具 逆向工程 rabbitmq处理请求日志 webservice发布和调用 扫码登陆 sql日志控制台打印显示出来 阿里云文件上传 阿里云短信发送 quartz动态定时任务,添加、删除任务
在本文中,我们将深入探讨如何在SpringBoot项目中整合Apache Shiro框架,实现动态权限加载更新、Session共享以及...通过自定义Realm和配置过滤器,你可以根据具体业务需求定制Shiro的行为,以满足不同场景的安全需求。
2. **配置 Shiro**:创建一个 `shiro.ini` 文件或者在 Spring Boot 的配置类中定义 Shiro 配置,包括 Realm(用于获取用户信息和权限)、过滤器链等。 3. **编写 Realm**:自定义 Realm 类,继承自 `...
3. **编写过滤器**:实现自定义的Shiro Filter,处理JWT的校验和权限控制。 4. **编写Controller**:在受保护的接口上添加注解,如`@RequiresAuthentication`和`@RequiresPermissions`。 5. **服务端生成和验证JWT...
- **创建Shiro配置**:编写`ShiroConfig`类,配置Shiro的 Realm、过滤器链等。 - **自定义Realm**: Realm是Shiro与应用程序数据源交互的桥梁,需要实现`AuthorizingRealm`接口,处理用户的认证和授权逻辑。 - **...