0%

switchyOmega+shadowsocks+chrome科学上网

使用ssr客户端,配置服务器信息后代理规则选择全局
image
系统代理设置为直连模式
image
打开选项设置,确保本地为1080
image

Read more »

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding:UTF-8 -*-
import matplotlib.pyplot as plt
import pandas as pd

shoot = {
'italy': [119, 74, 71, 68, 65, 61, 58, 56, 55, 51],
'spain': [56, 46, 42, 39, 37, 36, 35, 33, 33, 32],
'england': [64, 61, 55, 53, 53, 47, 44, 44, 43, 42],
'germany': [63, 62, 49, 48, 47, 46, 44, 44, 44, 41]
}

goal = {

'italy': [13, 11, 10, 10, 10, 9, 8, 8, 7, 7],
'spain': [15, 11, 11, 10, 8, 8, 8, 8, 8, 7],
'england': [12, 11, 9, 9, 8, 8, 8, 8, 8, 8],
'germany': [12, 12, 11, 11, 10, 9, 9, 9, 8, 7]
}

shoot_leader = {
'Cristiano Ronaldo': (1, 119),
'Werner': (1, 63),
'Messi': (1, 56),
'Salah': (1, 64)
}

goal_leader = {
'Aubameyang': (1, 12),
'Messi': (1, 15),
'Pia Turk': (1, 13),
'Iovich': (1, 12)
}

x = [i + 1 for i in range(10)]
df = pd.DataFrame(shoot, x)
ax = df.plot()
for key, value in shoot_leader.items():
plt.annotate(key, value)
plt.title("Top 10 shoot times distribution of 4 leagues")

df_goal = pd.DataFrame(goal, x)
df_goal.plot()
for key, value in goal_leader.items():
plt.annotate(key, value)
plt.title("Top 10 goal distribution of 4 leagues")

plt.show()

截图
goal
shoot times

Github代码仓库

shiro注解授权源码实现

授权流程

概括的说,shiro在实现注解授权时采用的是Spring AOP的方式。
在Controller里面的相关方法上添加@RequiresPermissions()注解,Shiro即可自动调用AuthorizationAttributeSourceAdvisor进行AOP操作。从自定义的com.sinosteel.framework.config.shiro.ShiroConfig类开始,该类用@Configuration注解,表示为一个Spring IoC容器,往IoC容器中加入两个Bean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager)
{
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}

@Bean
public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator()
{
DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();
daap.setProxyTargetClass(true);
return daap;
}
Read more »

shiro实现访问权限控制和用户身份认证

image

shiro的三大核心组件

  1. Subject:即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Subject 不仅仅代表某个用户,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。
  2. SecurityManager:即所有Subject的管理者,这是Shiro框架的核心组件,可以把他看做是一个Shiro框架的全局管理组件,用于调度各种Shiro框架的服务。
  3. Realms:域,Shiro 从从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。Realms则是用户的信息认证器和用户的权限人证器,我们需要自己来实现Realms来自定义的管理我们自己系统内部的权限规则。
Read more »

self-bounded type

形如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public BasicHolder <T> {   
T element;
void set(T arg){element = arg; }
T get(){ return element; }
void f(){
System.out.println(element.getClass().getSimpleName());
}
}

class Subtype extends BasicHolder <Subtype> {}

public class CRGWithBasicHolder {
public static void main(String [] args){
Subtype st1 = new Subtype(),st2 = new Subtype();
st1.set(ST2);
Suntype st3 = st1.get();
st1.f();
}
}
/* Output:
Subtype
*/

在结果类中将使用确切的类型而不是基类型。所以在Subtype中,set()的参数和get()的返回类型都是子类型。

Read more »

Github代码仓库

spring开发服务器端

Http消息机制(也即一些编程规范)

  1. controller一般只负责Http消息的传输;service负责业务逻辑的处理;repository负责执行数据库操作;domain层是领域模型对象,对应数据库中相应的表
  2. controller中基本的交互方法应写成:
1
2
3
@RequestMapping("自定义的路径")
@ResponseBody
public Response doSomething(Request request)

所有的Http请求都会被解析为Request类的实例,而对于基本的返回类型(String、JSON之类的),则一律定义成Response类实例

Read more »

TheNEXUS Maven By Example

Question

  1. 5.6节提到的依赖中设置scope为provided:This tells Maven that the JAR is “provided” by the container and thus should not be included in the WAR. 是什么意思?
  2. 第六章结合了Weather Module和Web Module,其中,在Web Module中加入了Weather的依赖,并添加了WeatherService服务,该服务中的retrieveFormat方法同Main中的start方法完成相同的工作。Web Module中新增WeatherServlet,里面的doGet方法完成实现对http请求的处理,请求天气数据并返回结果到页面展示。
  3. 当Maven执行一个有子模块的project的时候,Maven首先加载parent POM,然后定位所有的子模块。然后将所有的POM交给Maven Reactor,负责分析模块之间的依赖,确保以相应的顺序编译和安装相互依赖的模块。
  4. 第六章运行 mvn jetty:run的时候,提示找不到simple-weather-08-SNAPSHOT.jar这个包。而且Yahoo的weather.yahooapis.com网站访问不了。
  5. web.xml和weather-servlet.xml都是自动加载的吗?
Read more »

网络文件系统NFS:

  • 查看启动rpcbind服务的状态:
    ps -ef|grep rpcbind  
  • 修改NFS服务的配置文件:
    sudo vi /etc/exports 
    其中中的最后一行为新添加的NFS配置,NFS配置信息格式如下:
    <共享目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
    如:/home/tos/shareDir 192.168.137.129(rw,no_root_squash,async)
    客户端如果是 * ,表示所有主机都可以挂载
  • 启动服务:
    sudo service nfs-kernel-server start 
    查看运行状态:sudo service nfs-kernel-server status
      ps -ef|grep nfsd
    
  • 查看共享的文件夹和目标主机:
    showmount –e
Read more »

Linux

TTY

TeleTYpe的简称,用来新建一个终端来和计算机交互,TTY Driver会根据为每一个终端创建一个TTY设备

可以把TTY理解为一个管道,从一端写入的内容可以从另一端读出来

ssh可以远程连接计算机,但一旦这个连接断掉了,内核会给和该tty相关的进程发送SIGHUP信号,进程收到信号之后的默认操作是推出进程。这样一旦连接断掉,之前跑的东西就都停掉了,对于远程连接服务器跑实验来说无疑是不可接受的。tmux可以解决这个问题,tmux用来为ssh连接远程计算机。ssh客户端发送过来的数据包都会被tmux客户端接收到,然后tmux转发给tmux服务端,由服务端完成和远程计算机的交互

常用命令:

1
2
3
4
5
6
7
8
9
10
# creates a new tmux session named session_name
$ tmux new -s session_name
# attaches to an existing tmux session named session_name
$ tmux attach -t session_name
# switches to an existing session named session_name
$ tmux switch -t session_name
# lists existing tmux sessions
$ tmux list-sessions
# detach the currently attached session. ctrl-b + d means press key combination ctrl-b, then release the key combination, and then press key d
$ tmux detach (ctrl-b + d)

网络

linux刚安装系统如果上不了网,检查/etc/sysconfig/network-scripts/下面的网卡是否挂载,尝试ifup eth0,这里的eth0表示网卡名称

写在前面。

1
2
3
4
5
6
7
8
9
<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.4.1.RELEASE</version>

</parent>

这个是spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。

1. 程序启动入口

1
2
3
4
5
6
7
@SpringBootApplication
public class WeatherApplication {

public static void main(String[] args) {
SpringApplication.run(WeatherApplication.class, args);
}
}

执行SpringApplication的静态run方法,将WeatherApplication类和main方法的args作为参数传进去。

在下面的RestController类中定义了Web端访问的API,当访问的URL的path部分是”/“时,返回”Hello World!”

Read more »