springboot shrio自定义cookie属性

本文介绍如何在SpringBoot结合Shiro框架中自定义用于保存sessionId的Cookie属性,包括设置Cookie名称、HttpOnly、Secure标志、路径、过期时间等关键参数,增强安全性。

springboot shrio自定义cookie属性

	/**
     * 配置保存sessionId的cookie
     * 注意:这里的cookie 不是上面的记住我 cookie 
     * 记住我需要一个cookie session管理 也需要自己的cookie
     * @return
     */
    @Bean("sessionIdCookie")
    public SimpleCookie sessionIdCookie(){
        //这个参数是cookie的名称
        SimpleCookie simpleCookie = new SimpleCookie("JSESSIONID");
        //setcookie的httponly属性如果设为true的话,会增加对xss防护的安全系数。
        //它有以下特点:
        //setcookie()的第七个参数
        //设为true后,只能通过http访问,javascript无法访问
        //防止xss读取cookie
        simpleCookie.setHttpOnly(true);
        simpleCookie.setSecure(true);
        simpleCookie.setPath("/");
        //maxAge=-1表示浏览器关闭时失效此Cookie
        simpleCookie.setMaxAge(-1);
        return simpleCookie;
    }
### 回答1: 在Spring Boot中使用Shiro实现CSRF防护,可以通过以下步骤实现: 1. 配置Shiro的过滤器,将CsrfFilter加入到过滤器链中。 ```java @Bean public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); Map<String, Filter> filters = new HashMap<>(); filters.put("csrf", new CsrfFilter()); shiroFilter.setFilters(filters); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/api/**", "csrf,authc"); shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilter; } ``` 2. 实现CsrfFilter,对POST、PUT、DELETE请求进行CSRF Token验证。 ```java public class CsrfFilter extends OncePerRequestFilter { private final String CSRF_TOKEN = "csrfToken"; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (HttpMethod.POST.matches(request.getMethod()) || HttpMethod.PUT.matches(request.getMethod()) || HttpMethod.DELETE.matches(request.getMethod())) { HttpSession session = request.getSession(false); if (session != null) { String csrfToken = (String) session.getAttribute(CSRF_TOKEN); if (csrfToken != null && csrfToken.equals(request.getHeader(CSRF_TOKEN))) { filterChain.doFilter(request, response); return; } } response.setStatus(HttpStatus.FORBIDDEN.value()); return; } filterChain.doFilter(request, response); } } ``` 3. 在登录成功后生成CSRF Token,并将其存储到Session中。 ```java Subject subject = SecurityUtils.getSubject(); if (subject.isAuthenticated()) { Session session = subject.getSession(true); String csrfToken = UUID.randomUUID().toString(); session.setAttribute(CSRF_TOKEN, csrfToken); Cookie cookie = new Cookie(CSRF_TOKEN, csrfToken); cookie.setHttpOnly(true); cookie.setPath("/"); response.addCookie(cookie); return "redirect:/index"; } ``` 这样,通过配置Shiro的过滤器和实现CsrfFilter,就可以在Spring Boot中使用Shiro实现CSRF防护了。 ### 回答2: Spring Boot是一个开源的Java开发框架,用于快速构建Java应用程序。而Shiro是一个强大且易于使用的Java安全框架,提供了身份认证、授权、加密和会话管理等功能。在Spring Boot中启用Shiro的CSRF防护可以通过以下步骤完成: 1. 首先,在项目的依赖中添加Shiro和Spring Security相关的依赖项。可以在项目的pom.xml文件中添加相应的依赖项,例如: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.7.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 在项目的配置文件中配置Shiro和Spring Security的相关信息。可以在application.properties或application.yml文件中添加相关配置项,例如: ```yaml # Shiro配置 shiro: cookie: name: shiroCookie loginUrl: /login successUrl: /home unauthorizedUrl: /unauthorized # Spring Security配置 spring: security: enable-csrf: true require-csrf-protection-matcher: /api/** ``` 上述配置项中,我们指定了Shirocookie名称,登录URL,成功URL和未授权URL。同时,我们启用了Spring Security的CSRF防护,并指定了需要进行CSRF防护的URL匹配规则。 3. 在项目的启动类中加上@EnableWebSecurity注解。这样可以启用Spring Security的CSRF防护功能。例如: ```java @EnableWebSecurity public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 通过以上步骤,我们就成功地启用了Spring Boot中的Shiro和Spring Security的CSRF防护功能。这将保护我们的应用程序免受CSRF攻击的威胁,增加了系统的安全性。 ### 回答3: 在Springboot中启用Shiro框架的CSRF防护可以通过以下步骤实现: 1. 添加Shiro-Spring依赖: 在项目的pom.xml文件中,添加Shiro-Spring的依赖: <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.7.1</version> </dependency> 2. 配置ShiroFilterFactoryBean: 在Springboot的配置类中,创建一个ShiroFilterFactoryBean的实例并进行配置。其中,需要设置`securityManager`属性Shiro的SecurityManager实例,并设置`filters`属性为一个Map,将CSRF过滤器添加至其中。 @Bean public ShiroFilterFactoryBean shiroFilter() { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager()); Map<String, Filter> filterMap = new LinkedHashMap<>(); filterMap.put("csrf", new CsrfFilter()); shiroFilterFactoryBean.setFilters(filterMap); return shiroFilterFactoryBean; } 3. 配置CsrfFilter: 创建一个自定义的CsrfFilter类,继承Shiro的官方提供的FormAuthenticationFilter。在该类中,重写preHandle方法,在请求到达目标方法之前进行CSRF防护的逻辑处理。例如,可以检查请求中的CSRF Token是否匹配,如果不匹配则返回错误信息。 public class CsrfFilter extends FormAuthenticationFilter { @Override protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { // CSRF防护逻辑处理 // 检查CSRF Token是否匹配 // 如果不匹配,返回错误信息 // 如果匹配,继续执行目标方法 return super.preHandle(request, response); } } 4. 配置CSRF Token: 在每个请求页面中,需要生成一个随机的CSRF Token,并将其放置在请求参数或者请求头中,以便进行CSRF防护。可以通过在表单中添加隐藏字段或者在请求头中添加自定义字段的方式实现。 以上是通过Springboot整合Shiro实现CSRF防护的简要步骤。具体的实现步骤和配置可根据项目的实际情况进行调整和扩展。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值