千家信息网

Spring security自定义登录成功后的处理是什么样的

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Spring security自定义登录成功后的处理是什么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们来讲一下如何自定义登录成
千家信息网最后更新 2026年10月31日Spring security自定义登录成功后的处理是什么样的

Spring security自定义登录成功后的处理是什么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

我们来讲一下如何自定义登录成功后的处理逻辑。先来回顾下默认情况下,登录成功过后spring security 会帮我们做些什么: 未登录的情况下,我们直接访问应用中的资源,页面会自动跳转到登录页;当登录成功后,页面会自动重定向到我登录前请求的 url。

如何更改默认的登录成功后的处理结果

比如:如果我们想在登录成功后,响应一个 json 字符串(包括"登录成功"这样的提示信息,响应code,以及跳转的url)给前端。应该怎么办?

步骤 1

首先复制上一节的项目工程 spring-security-02,重命名为 Spring-security-03。 maven 依赖不需要改变,如下所示:

                                            org.springframework.boot                        spring-boot-starter-security                                                        org.springframework.boot                        spring-boot-starter-web                        

步骤2

定义登录成功后的处理类 GoAuthenticationSuccessHandler

   /**         * 自定义 登录成功 处理类         */        [@Component](https://my.oschina.net/u/3907912)        public class GoAuthenticationSuccessHandler implements AuthenticationSuccessHandler {                @Autowired                private ObjectMapper objectMapper;                /**                 * {"code":200,"message":"操作成功","data":"登录成功"}                 * [@param](https://my.oschina.net/u/2303379) request                 * [@param](https://my.oschina.net/u/2303379) response                 * [@param](https://my.oschina.net/u/2303379) authentication                 * @throws IOException                 * @throws ServletException                 */                @Override                public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)                                throws IOException, ServletException {                        response.setHeader("Content-Type", "application/json;charset=utf-8");                        response.getWriter().print(objectMapper.writeValueAsString(CommonResult.success("登录成功")));                        response.getWriter().flush();                }        }

步骤2

在 WebSecurityConfig 配置类中,注入自定义处理类的依赖 :

@Autowiredprivate GoAuthenticationSuccessHandler successHandler;@Autowiredprivate GoAuthenticationFailureHandler failureHandler;

步骤3

在 protected void configure(HttpSecurity http) 方法中,追加如下代码:

 // 这些是本来就有的        http.formLogin()        .loginPage("/loginPage.html")// 自定义登录页        .loginProcessingUrl("/form/login")// 自定义登录 action, 名字随便起        // 以下是新增的        .successHandler(successHandler)// 自定义登录成功处理类        .failureHandler(failureHandler);// 自定义登录失败处理类

小结

从上面的代码中我们可以看到,新增了两个配置,在 successHandler 和 failureHandler 方法中分别注入了一个处理类,我们着重看下 GoAuthenticationSuccessHandler 处理类, 通过重写 AuthenticationSuccessHandler 的方法,响应了一段json给前端。 而failureHandler 是登录失败时做一些处理,在这里我们会响应登录失败的message给前端。这些响应结果我们都可以自定义。 你可以根据实际需求去选择是否需要自定义这些处理类。

扩展

回顾一下,之前如果用户没有登录直接访问我们的应用资源,会自动跳转到登录页,如果登录成功后,去访问没有权限的url,会给我们一段英文提示,大致意思就是没有权限。这些我们仍然是可以定制的。比如当我们没有登录时,给前端提示"用户未登录",当我们没有权限时,提示前端"用户没有权限"。

步骤1

定义两个处理类 GoAuthenticationEntryPoint 和 GoAccessDeniedHandler

`

/** * 自定义 未登录 或者 token 失效 处理类 */@Componentpublic class GoAuthenticationEntryPoint implements AuthenticationEntryPoint {        @Autowired        private ObjectMapper objectMapper;        @Override        public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {                response.setCharacterEncoding("UTF-8");                response.setContentType("application/json");                response.getWriter().println(objectMapper.writeValueAsString(CommonResult.unauthorized(authException.getMessage())));                response.getWriter().flush();        }}/** * 自定义没有访问权限处理类 */@Componentpublic class GoAccessDeniedHandler implements AccessDeniedHandler {        @Autowired        private ObjectMapper objectMapper;        /**         * @param request         * @param response         * @param e         * @throws IOException         * @throws ServletException         *         * @return {"code":403,"message":"没有相关权限","data":"Access is denied"}         */        @Override        public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) throws IOException, ServletException {                response.setHeader("Content-Type", "application/json;charset=utf-8");                response.getWriter().print(objectMapper.writeValueAsString(CommonResult.forbidden(e.getMessage())));                response.getWriter().flush();        }}

`

步骤2

将自定义的两个处理类注入到 WebSecurityConfig 类中

` @Autowired private GoAccessDeniedHandler accessDeniedHandler;

@Autowiredprivate GoAuthenticationEntryPoint entryPoint;

`

步骤3

打开 WebSecurityConfig 配置类,在 configure 方法中追加如下代码:

@Override protected void configure(HttpSecurity http) throws Exception { // 此处省略一部分代码 http.exceptionHandling() .accessDeniedHandler(accessDeniedHandler)// 用户没有访问权限处理器 .authenticationEntryPoint(entryPoint);// 用户没有登录处理器 }

上面我们总共定义了四个处理类,分别作用于以下四种情况发生之后:

  1. 当我们登录成功后。

  2. 当我们登录失败后。

  3. 当我们没有登录而去访问资源时。

  4. 当我们访问没有权限的资源时。

看完上述内容,你们掌握Spring security自定义登录成功后的处理是什么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

登录 处理 成功 权限 步骤 方法 前端 用户 代码 资源 提示 两个 情况 配置 内容 处理器 更多 结果 问题 页面 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 美国互联网科技巨头监管 互联网科技排名 狮子座互联网科技有限公司 齐家互联网科技有限公司 居家互联网科技有限公司 盛创互联网科技有限公司 晓花互联网科技有限公司网址 江阴互联网智能科技产品进口 玉溪互联网科技怎么选 本届互联网博览会上的黑科技 互联网公司高科技产品 江苏苏星互联网科技有限公司 深圳无忧互联网科技 互联网领先科技宣传片 半导体是互联网高科技吗 唐山双旺合互联网科技产业园 长沙易易互联网科技有限公司 高科技和互联网的现代国家 科技发展第三阶段互联网时代 互联网中国科技 互联网医疗科技 杭州互联网科技公司 科技互联网公司logo 火传媒上海互联网科技 新华互联网科技校企合作 山东吉时兔互联网科技有限公司 汽车互联网创新科技园 互联网科技革命什么开始 坤平互联网科技
0