Все это уже позаботилось о вас в RememberMeAuthenticationFilter
Этот фильтр вставляется и выполняет следующие проверки
Authentication rememberMeAuth =
rememberMeServices.autoLogin(request, response);
[111 ]
SecurityContextHolder.getContext().setAuthentication(rememberMeAuth);
onSuccessfulAuthentication(request, response, rememberMeAuth);
[ 1119]
eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(...));
successHandler.onAuthenticationSuccess(request, response,
rememberMeAuth);
Если вы хотите перехватить эту цепочку событий, сделайте это в своем AuthenticationManager
. Шаг 2, где Spring передаст вам информацию.
У Дункана Мердока есть пакет Venn , которого нет в CRAN . ( подсказка Габору Гротендику )
Вы также можете прочитать об этом в «Журнале статистического программного обеспечения» .
Я бы порекомендовал пакет VennDiagram: http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf
На пакете 19 вы найдете 10 Пакеты очень хороших примеров (как продвинутых, так и упрощенных). На данный момент я не нашел ничего, что он не может сделать, что мне нужно сделать.
Функция Venn в пакете gplots также полезна, если вам нужно создать диаграмму Венна из 4/5 наборов.
I use two custom functions that to the trick. My implementation of venndia plots the venn diagram and returns lists of overlaps between A and B (and C). See the code below.
With these, you can
vd <- venndia(A=LETTERS[1:15], B=LETTERS[5:20], getdata=TRUE)
which will both plot and return the data. you can switch off returning the data by doing
venndia(A=LETTERS[1:15], B=LETTERS[5:20])
since getdata is FALSE by default. /Daniel
circle <- function(x, y, r, ...) {
ang <- seq(0, 2*pi, length = 100)
xx <- x + r * cos(ang)
yy <- y + r * sin(ang)
polygon(xx, yy, ...)
}
venndia <- function(A, B, C, getdata=FALSE, ...){
cMissing <- missing(C)
if(cMissing){ C <- c() }
unionAB <- union(A, B)
unionAC <- union(A, C)
unionBC <- union(B, C)
uniqueA <- setdiff(A, unionBC)
uniqueB <- setdiff(B, unionAC)
uniqueC <- setdiff(C, unionAB)
intersAB <- setdiff(intersect(A, B), C)
intersAC <- setdiff(intersect(A, C), B)
intersBC <- setdiff(intersect(B, C), A)
intersABC <- intersect(intersect(A, B), intersect(B, C))
nA <- length(uniqueA)
nB <- length(uniqueB)
nC <- length(uniqueC)
nAB <- length(intersAB)
nAC <- length(intersAC)
nBC <- length(intersBC)
nABC <- length(intersABC)
par(mar=c(2, 2, 0, 0))
plot(-10, -10, ylim=c(0, 9), xlim=c(0, 9), axes=FALSE, ...)
circle(x=3, y=6, r=3, col=rgb(1,0,0,.5), border=NA)
circle(x=6, y=6, r=3, col=rgb(0,.5,.1,.5), border=NA)
circle(x=4.5, y=3, r=3, col=rgb(0,0,1,.5), border=NA)
text( x=c(1.2, 7.7, 4.5), y=c(7.8, 7.8, 0.8), c("A", "B", "C"), cex=3, col="gray90" )
text(
x=c(2, 7, 4.5, 4.5, 3, 6, 4.5),
y=c(7, 7, 2 , 7 , 4, 4, 5),
c(nA, nB, nC, nAB, nAC, nBC, nABC),
cex=2
)
if(getdata){
list(A=uniqueA, B=uniqueB, C=uniqueC,
AB=intersAB , AC=intersAC , BC=intersBC ,
ABC=intersABC
)
}
}