HarmonyOS鸿蒙最全OAuth 2(1),2024年最新鸿蒙常用面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

// 添加 Thymeleaf Spring Security 依赖,与 Thymeleaf 版本一致都是 3.x
compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.2.RELEASE')

// 添加 Spring Security OAuth2 依赖
compile('org.springframework.security.oauth:spring-security-oauth2:2.1.0.RELEASE')

// 该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依
testCompile('org.springframework.boot:spring-boot-starter-test')

// 添加 Spring Security Test 依赖
testCompile('org.springframework.security:spring-security-test:4.2.2.RELEASE')

#### 配置


项目的核心配置如下:



github.client.clientId=ad2abbc19b6c5f0ed117
github.client.clientSecret=26db88a4dfc34cebaf196e68761c1294ac4ce265
github.client.accessTokenUri=https://github.com/login/oauth/access_token
github.client.userAuthorizationUri=https://github.com/login/oauth/authorize
github.client.clientAuthenticationScheme=form
github.client.tokenName=oauth_token
github.client.authenticationScheme=query
github.resource.userInfoUri=https://api.github.com/user


包括了作为一个client 所需要大部分参数。其中 clientId 、 clientSecret 是在 GitHub 注册一个应用时生成的。如果读者不想注册应用,则可以直接用上面的配置即可。   
 如果要注册,则文章最后有注册流程。


#### 项目安全的配置


安全配置上需要加上`@EnableWebSecurity` 、 `@EnableOAuth2Client`注解,来启用Web 安全认证记忆,表明这是一个OAuth 2.0 客户端 :



@EnableWebSecurity
@EnableOAuth2Client // 启用 OAuth 2.0 客户端
public class SecurityConfig extends WebSecurityConfigurerAdapter {


使用 Spring Security,我们需要继承 `org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter`并重写以下 configure 方法:



@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class)
.antMatcher(“/**”)
.authorizeRequests()
.antMatchers(“/”, “/index”, “/403”,“/css/**”, “/js/**”, “/fonts/**”).permitAll() // 不设限制,都允许访问
.anyRequest()
.authenticated()
.and().logout().logoutSuccessUrl(“/”).permitAll()
.and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
;
}


上面的配置是设置了一些过过滤策略,除了静态资源以及不需要授权的页面,我们允许访问,其他的资源,都是需要授权访问。


其中,我们也设置了一个过滤器 ssoFilter,用于在 BasicAuthenticationFilter 之前进行拦截。如果拦截道的是`/login`,就是访问认证服务器。



private Filter ssoFilter() {
OAuth2ClientAuthenticationProcessingFilter githubFilter = new OAuth2ClientAuthenticationProcessingFilter(“/login”);
OAuth2RestTemplate githubTemplate = new OAuth2RestTemplate(github(), oauth2ClientContext);
githubFilter.setRestTemplate(githubTemplate);
UserInfoTokenServices tokenServices = new UserInfoTokenServices(githubResource().getUserInfoUri(), github().getClientId());
tokenServices.setRestTemplate(githubTemplate);
githubFilter.setTokenServices(tokenServices);
return githubFilter;

}

@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}

@Bean
@ConfigurationProperties(“github.client”)
public AuthorizationCodeResourceDetails github() {
return new AuthorizationCodeResourceDetails();
}

@Bean
@ConfigurationProperties(“github.resource”)
public ResourceServerProperties githubResource() {
return new ResourceServerProperties();
}


#### 资源服务器


我们写了两个控制器来提供相应的资源。


MainController.java



@Controller
public class MainController {

@GetMapping("/")
public String root() {
    return "redirect:/index";
}

@GetMapping("/index")
public String index(Principal principal, Model model) {
    if(principal == null ){
        return "index";
    }
    System.out.println(principal.toString());
    model.addAttribute("principal", principal);
    return "index";
}

@GetMapping("/403")
public String accesssDenied() {
    return "403";
}

}


在index 页面,将如认证成功,将会显示一些认证信息。


UserController.java 是用来模拟用户管理的相关资源。



@RestController
@RequestMapping(“/”)
public class UserController {
/**
* 查询所用用户
* @return
*/
@GetMapping(“/users”)
@PreAuthorize(“hasAuthority(‘ROLE_USER’)”) // 指定角色权限才能操作方法
public ModelAndView list(Model model) {

    List<User> list = new ArrayList<>();    // 当前所在页面数据列表
    list.add(new User("waylau",29));
    list.add(new User("老卫",30));
    model.addAttribute("title", "用户管理");
    model.addAttribute("userList", list);
    return new ModelAndView("users/list", "userModel", model);
}

}


#### 前端页面


页面,我主要是采用 Thymeleaf 以及Bootstrap 来编写的。


首页用于现实用户的基本信息。



Hello Spring Security

已有用户登录

登录的用户为:

用户权限为:

用户头像为:

    </div>
    <div sec:authorize="isAnonymous()">
        <p>未有用户登录</p>
    </div>
</div>
```

用户管理界面显示用户的列表:

<body>
<div class="container">

    <div class="mt-3">
        <h2 th:text="${userModel.title}">Welcome to waylau.com</h2>
    </div>

    <table class="table table-hover">
        <thead>
        <tr>
            <td>Age</td>
            <td>Name</td>
            <td sec:authorize="hasRole('ADMIN')">Operation</td>
        </tr>
        </thead>
        <tbody>
        <tr th:if="${userModel.userList.size()} eq 0">
            <td colspan="3">没有用户信息!!</td>
        </tr>
        <tr th:each="user : ${userModel.userList}">

            <td th:text="${user.age}">11</td>
            <td th:text="${user.name}">waylau</a></td>
            <td sec:authorize="hasRole('ADMIN')">
                <div >
                    我是管理员
                </div>
            </td>
        </tr>
        </tbody>
    </table>


</body>

运行效果

这个是没有授权访问首页:

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

1-1715821998440)]
[外链图片转存中…(img-F4tZiNWu-1715821998441)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值