`
sslaowan
  • 浏览: 380456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringSecurity2 认证成功后跳转的页面

 
阅读更多

认证成功后,Spring会determineTargetUrl以决定跳转到哪里去:

  org.springframework.security.ui.AbstractProcessingFilter

 protected String determineTargetUrl(HttpServletRequest request) {
        // Don't attempt to obtain the url from the saved request if alwaysUsedefaultTargetUrl is set
    	String targetUrl = alwaysUseDefaultTargetUrl ? null : 
    		targetUrlResolver.determineTargetUrl(getSavedRequest(request), request, SecurityContextHolder.getContext().getAuthentication());

        if (targetUrl == null) {
            targetUrl = getDefaultTargetUrl();
        }

        return targetUrl;
    }
 

  有两种方法可以跳到非设置的默认的url去,可看TargetUrlResolverImpl的代码:

 

        public String determineTargetUrl(SavedRequest savedRequest, HttpServletRequest currentRequest,     Authentication auth) {
        String targetUrl = currentRequest.getParameter(targetUrlParameter);
        
        if (StringUtils.hasText(targetUrl)) {
            try {
                return URLDecoder.decode(targetUrl, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new IllegalStateException("UTF-8 not supported. Shouldn't be possible");
            }
        }

        if (savedRequest != null) {
            if (!justUseSavedRequestOnGet || savedRequest.getMethod().equals("GET")) {
                targetUrl = savedRequest.getFullRequestUrl();
            }
        }

        return targetUrl;
	}

   创建SavedRequest并放到Session里的方法如下:

 SavedRequest savedRequest = new SavedRequest(request, new PortResolverImpl());
		   request.getSession(true).setAttribute(AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY,savedRequest);

    这种方式记录下了你当前请求的URL,认证成功后会跳回到这个URL。

    而另外一个就是利用:

    /j_spring_cas_security_check?"+TargetUrlResolverImpl.DEFAULT_TARGET_PARAMETER+"="+targetUrl;

 

   判断是否已经认证可以这样看:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()!=null&&

     !"anonymousUser".equals( SecurityContextHolder.getContext().getAuthentication().getPrincipal())

同时满足表示已经登录。

分享到:
评论

相关推荐

    Spring Security跳转页面失败问题解决

    Spring Security 跳转页面失败问题的解决方法,并详细解释了 Spring Security 的基本概念、权限控制、antMatchers 的使用、permitAll 的使用、SecurityConfig 的使用、HttpSecurity 的使用、Spring Security 的配置...

    SpringBoot+SpringSecurity整合(实现了登录认证和权限验证)完整案例,基于IDEA项目

    SpringBoot+SpringSecurity整合示例代码,实现了从数据库中获取信息进行登录认证和权限认证。 本项目为idea工程,请用idea2019导入(老版应该也可以)。 本项目用户信息所需sql文件,在工程的resources文件夹下,...

    spring-security多登录页面配置

    本文将详细介绍如何在Spring Security框架下配置多登录页面,包括前台与后台用户的分开登录界面,以及注销登录后返回到不同的页面等功能。 #### 一、Spring Security简介 Spring Security是Spring家族中的一个子...

    springsecurity使用demo

    但你可以通过 `formLogin()` 方法自定义登录表单的 URL、提交地址以及登录成功和失败后的跳转页面。 6. **异常处理**: 当认证或授权失败时,Spring Security 会抛出异常。我们可以通过实现 `...

    spring security 3.1 配置登陆页面

    - `logout-success-url`定义了注销成功后的跳转页面。 为了自定义登录页面,你需要创建一个处理用户登录请求的控制器。这个控制器通常会处理登录表单的POST请求,进行身份验证,并根据结果重定向到相应的URL。例如...

    springsecurity官方文档3.2

    - **设置默认的登录后目标**: 如何定义用户登录成功后的默认跳转页面。 - **登出处理**: 介绍了如何配置用户登出逻辑。 - **使用其他身份验证提供程序**: 探讨了除了内置的提供程序之外,如何添加自定义的身份...

    Spring Security3 Demo

    在"SpringSecurity2Demo"这个项目中,我们可以预期看到以下组成部分: 1. **配置文件**: `spring-security.xml`,这是Spring Security的核心配置文件,包含了过滤器链的配置、用户认证源、授权规则等。 2. **控制...

    SpringSecurity 3配置文件

    - `access-denied-page`: 当用户无权访问特定资源时,Spring Security会跳转到这个页面。 - `role-prefix`: 默认情况下,Spring Security将角色名前缀为"ROLE_"。如果需要自定义,可以在这个属性中设置。 - `...

    spring security3配置和使用实例+教程

    教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...

    spring security oauth2 实现jwt sso

    Spring Security OAuth2 与 JWT 实现的SSO详解 在当今的互联网应用中,单点登录(Single Sign-On,简称SSO)已经成为一种常见的身份验证机制,它允许用户在一个系统中登录后,无需再次登录就能访问其他关联系统。在...

    spring security4登陆例子

    2. **配置跳转权限**:此方法定义了不同的URL路径所需的访问权限。 ```java @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/hello/**")....

    Spring Security整合Thymeleaf实现访问控制

    // 设置登录页面和登录成功后的跳转页面 http.logout().logoutSuccessUrl("/"); // 设置登出后重定向的URL } } ``` 为了实现Thymeleaf模板中的访问控制,我们需要在模板文件中使用Thymeleaf的条件语句,如`th:if...

    springSecurity简易实例

    .defaultSuccessUrl("/", true) // 登录成功跳转到主页 .permitAll() .and() .logout() // 设置登出 .permitAll(); } } ``` ### 5. 配置Controller 创建`HomeController.java`,定义主页和登录页面的路由: ...

    Spring Security 3多用户登录实现之七 用户验证失败处理改进

    默认情况下,Spring Security提供了`SimpleUrlAuthenticationFailureHandler`,它会将用户重定向到预设的错误页面。但我们可以根据需求实现`AuthenticationFailureHandler`接口来自定义失败处理逻辑,例如返回特定...

    spring security、 mybatis、 spring mvc 整合权限管理系统

    结合Spring Security,可以实现登录验证后的跳转逻辑,以及不同权限用户的页面展示差异。 整合这三个组件的过程通常涉及以下几个步骤: 1. 配置Spring Security:定义安全配置类,设置过滤器链,实现自定义的认证...

    SpringSecurity学习1

    通常会包含一个 `loginController` 用于处理登录逻辑,以及登录和登录成功后的跳转页面。启动应用后,SpringSecurity 会拦截所有未授权的请求并引导用户到默认的登录页面。 为了自定义登录界面,你需要创建一个 `...

    SpringBoot+SpringSecurity+Vue实现后台管理系统的开发项目源代码

    在本项目中,开发者利用了SpringBoot、SpringSecurity和Vue.js三大技术栈构建了一个后台管理系统。下面将分别介绍这三个核心组件及其在项目中的作用和重要性。 **SpringBoot** SpringBoot是Spring框架的一个扩展,...

    springbootspringsecurity前后端分离(一个小demo)

    然后,Spring Security是Spring生态系统中的安全模块,用于提供认证和授权服务。它可以保护我们的API免受未经授权的访问,确保只有经过身份验证和授权的用户才能访问敏感资源。在前后端分离的架构中,Spring ...

Global site tag (gtag.js) - Google Analytics