当前位置:   article > 正文

springsecurity oauth2.0 springboot整合 spring security自定义登录页面5_springboot security oauth2 jwt 自己的login页面

springboot security oauth2 jwt 自己的login页面

一 自定义认证页面 

1.1 说明

1. 如果用户没有自定义登录页面spring security 默认会启动自身内部的登录页面,尽管自动生成的登录页面很方便 快速启动和运行,但大多数应用程序都希望定义自己的登录页面。

1.2 自定义登录页面

在新建一个webapp目录,和resouces目录,平级,将login.jsp页面考配到这个页面下:

mylogin.jsp 页面代码:

  1. <%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" %>
  2. <html>
  3. <head>
  4. <title>用户登录</title>
  5. </head>
  6. <body>
  7. <form action="login" method="post">
  8. 用户名:<input type="text" name="username"><br>
  9. &nbsp;&nbsp;&nbsp;码:
  10. <input type="password" name="password"><br>
  11. <input type="submit" value="登录">
  12. </form>
  13. </body>
  14. </html>

1.2 配置视图

在application配置视图跳转的位置

1.3 认证页面的配置

在WebConfig.java中配置认证页面地址: 

说明:这里的 setViewName("mylogin"); 指向的是webapp/WEB-INF/view下的mylogin.jsp页面

  1. @Configuration//就相当于springmvc.xml文件
  2. public class WebConfig implements WebMvcConfigurer {
  3. //默认Url根路径跳转到/login,此url为spring security提供
  4. @Override
  5. public void addViewControllers(ViewControllerRegistry registry) {
  6. System.out.println("webconfig类中的视图器....");
  7. //这里的setViewName("redirect:/login")跳转spring security跳转自带的登录页面login.jsp页面
  8. // registry.addViewController("/").setViewName("redirect:/login");
  9. registry.addViewController("/").setViewName("redirect:/login-view");
  10. registry.addViewController("/login-view").setViewName("mylogin");
  11. }
  12. }

 1.4 配置安全登录信息 

 WebSecurityConfig中配置表登录信息:

1.fromLogin(): 允许表单登录
2.loginPage(): 指定我们自己的登录页
3.loginProcessingUrl(): 指定处理登录的URL,也就是用户名、密码表单提交的目的路径
4.successForwardUrl():指定登录成功后的跳转URL
5.formLogin().permitAll() 我们必须允许所有用户访问我们的登录页(例如为验证的用户),这个 formLogin().permitAll() 方法允许 任意用户访问基于表单登录的所有的URL。 

3.代码信息: 

  1. package com.ljf.spt.security.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  5. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  6. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  7. import org.springframework.security.core.userdetails.User;
  8. import org.springframework.security.core.userdetails.UserDetailsService;
  9. import org.springframework.security.crypto.password.NoOpPasswordEncoder;
  10. import org.springframework.security.crypto.password.PasswordEncoder;
  11. import org.springframework.security.provisioning.InMemoryUserDetailsManager;
  12. /**
  13. * @author Administrator
  14. * @version 1.0
  15. **/
  16. //@EnableWebSecurity
  17. @Configuration
  18. public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  19. //1.定义用户信息服务(查询用户信息)
  20. @Bean
  21. public UserDetailsService userDetailsService(){
  22. InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
  23. manager.createUser(User.withUsername("zhangsan").password("123").authorities("p1").build());
  24. manager.createUser(User.withUsername("lisi").password("456").authorities("p2").build());
  25. return manager;
  26. }
  27. //2.密码编码器
  28. @Bean
  29. public PasswordEncoder passwordEncoder(){
  30. return NoOpPasswordEncoder.getInstance();
  31. }
  32. //3.安全拦截机制(最重要)
  33. @Override
  34. protected void configure(HttpSecurity http) throws Exception {
  35. http.csrf().disable(); //屏蔽CSRF控制,即spring security不再限制CSRF
  36. http.authorizeRequests()
  37. .antMatchers("/user/r1").hasAuthority("p1") //p1角色具有访问/user/r1读取权限
  38. .antMatchers("/user/r2").hasAuthority("p2") //p2角色具有访问/user/r2读取权限
  39. .antMatchers("/user/**").authenticated()//所有/user/**的请求必须认证通过
  40. .anyRequest().permitAll()//除了/user/**,其它的请求可以不经过认证,就可以访问
  41. .and()
  42. .formLogin()//允许表单登录
  43. .loginPage("/login-view")//指定我们自己的登录页
  44. .loginProcessingUrl("/login") //设置登录页面,用户名和密码提交的表单请求页面
  45. .successForwardUrl("/login-success") //自定义登录成功的页面地址,登录成功跳转的地址
  46. // 我们必须允许所有用户访问我们的登录页(例如为验证的用户),这个 formLogin().permitAll() 方法允许 任意用户访问基于表单登录的所有的URL。
  47. .permitAll();//
  48. //
  49. }
  50. }

 1.5  controller登录信息

1.截图

 2. 代码:

  1. package com.ljf.spt.ss.controller;
  2. import org.springframework.security.core.Authentication;
  3. import org.springframework.security.core.context.SecurityContextHolder;
  4. import org.springframework.security.core.userdetails.UserDetails;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. /**
  9. * @ClassName: LoginController
  10. * @Description: TODO
  11. * @Author: admin
  12. * @Date: 2023/08/03 18:59:45 
  13. * @Version: V1.0
  14. **/
  15. @RestController
  16. public class LoginController {
  17. @RequestMapping(value = "/login-success",produces = {"text/plain;charset=UTF-8"})
  18. public String loginSuccess(){
  19. return geteUsername()+" 登录成功";
  20. }
  21. /**
  22. * 测试资源1
  23. * @return
  24. */
  25. @GetMapping(value = "/user/r1",produces = {"text/plain;charset=UTF-8"})
  26. public String r1(){
  27. return geteUsername()+" 访问资源1";
  28. }
  29. /**
  30. * 测试资源2
  31. * @return
  32. */
  33. @GetMapping(value = "/user/r2",produces = {"text/plain;charset=UTF-8"})
  34. public String r2(){
  35. return geteUsername()+" 访问资源2";
  36. }
  37. //获取当前用户信息
  38. private String geteUsername(){
  39. String username = null;
  40. //当前认证通过的用户身份
  41. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  42. //用户身份
  43. Object principal = authentication.getPrincipal();
  44. if(principal == null){
  45. username = "匿名";
  46. }
  47. if(principal instanceof UserDetails){
  48. UserDetails userDetails = (UserDetails) principal;
  49. username = userDetails.getUsername();
  50. }else{
  51. username = principal.toString();
  52. }
  53. return username;
  54. }
  55. }

 1.6 启动springboot项目

地址: http://localhost:8080/spt-security/login-view

 

访问资源r1

访问资源r2:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/84269
推荐阅读
相关标签
  

闽ICP备14008679号