【笔记】项目工作中总结(二)

优雅的创建URL参数

    public static void main(String[] args) {
        UriComponentsBuilder builder =
            UriComponentsBuilder.fromHttpUrl("http://example.com/api/endpoint").queryParam("reqNum", "你/好 a b=test");
        System.out.println(builder.toUriString());
    }

输出:

nginx alias root区别

		# 解决前端域名路径/prefix静态资源问题
		location /prefix/static/ {
            alias  html/static/;
            index  index.html index.htm;
        }

OAuth2回调地址方更改策略

微软对OAuth2授权时候得回调地址,防止更改的策略,值得学习(虽然一般项目会有OAuth配置管理中心,配置回调地址才能回调,也可以一定程度上防止更改,但微软这里相当于做了两次防更改,我在做其他项目的时候是没有这个机制的。):

https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/oauth2/v2.0/authorize?scope=openid+profile+email&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A9527%2Foauth2%2Fcallback%2Fazure&state=fd480b8d-ef11-4c31-abf1-900c29a71d30&nonce=cc80bb75-3a87-42b3-ab1a-aa3e096f41bb&prompt=select_account&client_id=XXXXXXXXX-XXXXXXXXXXX-07a976XXXXXX&response_mode=query

这里不能直接更改redirect_uri,来满足我们回调到自己想要的页面,因为redirect_uri 是会和nonce 做匹配绑定,认为更改访问地址,是达不到授权回调的,这样有效避免了对地址栏授权地址更改达到回调到意想不到页面的攻击。

OAuth2- jwks终端转RSA公钥

        <!-- jwks convert -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>jwks-rsa</artifactId>
            <version>0.9.0</version>
        </dependency>

            // JwkProviderBuilder里边默认包含了后缀:".well-known/jwks.json"
            JwkProviderBuilder jpb = new JwkProviderBuilder(oauth2Uri + "/oauth/");
            JwkProvider jp = jpb.build();
            Jwk jwk = jp.get(keyId);
            rsaPublicKey = jwk.getPublicKey();
            logger.info("初始化RSA公钥完成......");

Linux

find / -iname jenkins

Dockerfile
CMD java -jar jarfile.jar --spring.profiles.active=alidev --jasypt.encryptor.password=XXXWeChat

Sqlserver数据库授权

-- 切换到创建数据库
use MISC_WMP_AUTH;
go

-- 创建登录账户
create login xxx_admin with password='4r0qzxzs56h3!', default_database=XXX_AUTH; 
go

-- 创建数据库用户
create user user_xxx_auth for login xxx_admin with default_schema=dbo;
go

-- 用户授权
exec sp_addrolemember 'db_owner', 'user_xxx_auth';
go
 

遗留问题

  1. 重写异常继承问题;
  2. 基于时间的 OTP(一次性密码)
  3. 全局读取角色权限;当前用户名等;
  4. mybatis plus几级缓存
  5. BaseResult Object T ? 查看
  6. TokenThreadLocal.remove(); 记录日志的时候

配置WebSecurityConfigurerAdapter需要注入Bean时:
    @Bean
    public TokenAuthenticationFilter tokenAuthenticationFilter() {
        return new TokenAuthenticationFilter();
    }

spring oauth2:

public class DefaultTokenServices implements AuthorizationServerTokenServices

            clientId: axxxxxxxxxxxxxxxx
            clientSecret: xxxxxxxxxxxxxxxx
            redirectUri: "{baseUrl}/oauth2/callback/{registrationId}"
            authorization-grant-type: authorization_code
            scope:
              - offline_access
              - openid
              - profile
        provider:
          azure:
            authorizationUri: https://login.microsoftonline.com/xxxxxxxxxxxxxxxx/oauth2/v2.0/authorize
            tokenUri: https://login.microsoftonline.com/xxxxxxxxxxxxxxxx/oauth2/v2.0/token
            userInfoUri: https://graph.microsoft.com/oidc/userinfo
            

SSH Tools

https://info.ssh.com/tectia-ssh-client-trial-download
SSH Secure Shell Client - WinSCP - Putty - FileZilla Client

Lambda

        // SlicInfoForm
        List<SlicInfoForm> slicInfoFormList = collect.stream().map(i -> {
            SlicInfoForm form = new SlicInfoForm();
            // 建议使用hutool工具
            BeanUtil.copyProperties(i, form);
            return form;
        }).collect(Collectors.toList());


        LambdaQueryWrapper<UmsRole> wrapper =
            Wrappers.<UmsRole>lambdaQuery().select(UmsRole::getRoleCode).eq(UmsRole::getStatus, StatusConsts.NORMAL);
        return umsRoleService.list(wrapper).stream().map(UmsRole::getRoleCode).collect(Collectors.toList());

横向扩展:比如可以增加一台节点/机器 比如:mysql新增加一个从库、tomcat新增加一台机器;
纵向扩展:比如可以通过修改mysql参数内存比例、修改tomcat的线程数;

jwt获取payload写法

            JWSObject jwsObject = JWSObject.parse(realToken);
            String userStr = jwsObject.getPayload().toString();
            UserDTO userDto = JSONUtil.toBean(userStr, UserDTO.class);

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-oauth2-jose</artifactId>
		</dependency>

常用开头语

Can you spare me a few minutes?
Can you give me some time?

Would you mind to share me how 

Would you please do xxx?

maven管理技巧

        <dependency>
            <groupId>com.macro.mall</groupId>
            <artifactId>mall-common</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-data-redis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

如何获取Request对象(在security loadByUsername很有用)

    @Autowired
    private HttpServletRequest request;

设置全局参数:

RequestContextHolder.setRequestAttributes(context);

BFF

(Back-end For Front-end)

SpringCloud常见微服务总结-

服务治理(Eureka、Consul、Nacos),调用(Ribbon、Feign),降级、熔断(Hystrix),网关(Gateway)

微服务项目设计:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值