Spring Security教程外篇(2)---- 乱起八糟的一下东西,自己备用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jaune161/article/details/18405071

intercept-url中access配置

IS_AUTHENTICATED_ANONYMOUSLY 允许匿名用户进入

IS_AUTHENTICATED_FULLY 允许登录用户进入

IS_AUTHENTICATED_REMEMBERED 允许登录用户和rememberMe用户进入

支持表达式

<sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager"
		use-expressions="true">

表达式在access中要写成hasRole(xxx),如果access中任然写ROLE_USER这中形式的话会报下面的错误

Unsupported configuration attributes: [AUTH_GG_FBGBGG, AUTH_GG_FBGBGG]


目前Spring已经不提供下载地址都是Maven地址,但从Spring的Maven仓库中还可以下载到

仓库地址 http://maven.springframework.org/

Spring下载:http://maven.springframework.org/release/org/springframework/spring/

SpringData:http://maven.springframework.org/release/org/springframework/data/

SpringSecurity:http://maven.springframework.org/release/org/springframework/security/


如何获取到Session中的UserDeatils;

在页面中可以使用

     <p>用户名:<sec:authentication property="name"/> </p>
     <p>用户名:<sec:authentication property="principal.username"/> </p>
     <p>用户姓名:<sec:authentication property="principal.name"/> </p>
     <p>用户名:${SPRING_SECURITY_CONTEXT.authentication.principal.username}</p>
     <p>用户姓名:${SPRING_SECURITY_CONTEXT.authentication.principal.name} </p>
principal为UserDeatils,在el表达式中不能直接通过name字段来获取用户名即

${SPRING_SECURITY_CONTEXT.authentication.name}是错误的

在后台程序中可以通过SecurityContextHolder来获取

UserDetails user = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();





串口接收到乱起八糟的字符

08-12

通过串口操作短信收发,用的是西门子的modem,打开串口之后,会接受到一些无用的字符,以前用栈桥的不会出现这种问题,打开串口代码如下:rnBOOL CHIGDlg::OpenPort(LPCTSTR Port) rn rn COMMTIMEOUTS CommTimeOuts; rn rn // 打开串口 rn theApp.m_hSmsComm = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); rn if(theApp.m_hSmsComm == INVALID_HANDLE_VALUE) rn rn MessageBox(_T("无法打开端口或端口已打开!请检查是否已被占用.")); rn return FALSE; rn rn rn GetCommState(theApp.m_hSmsComm, &dcb); /* 读取串口的DCB */ rn dcb.BaudRate = 9600; rn dcb.ByteSize = 8; rn dcb.Parity = NOPARITY; rn dcb.StopBits = ONESTOPBIT; rn dcb.fParity = FALSE; /* 禁止奇偶校验 */ rn dcb.fBinary = TRUE; rn dcb.fDtrControl = 0; /* 禁止流量控制 */ rn dcb.fRtsControl = 0; rn dcb.fOutX = 0; rn dcb.fInX = 0; rn dcb.fTXContinueOnXoff = 0; rn rn //设置状态参数 rn SetCommMask(m_hSmsComm, EV_RXCHAR | EV_CTS | EV_DSR); /* 串口事件:接收到一个字符 */ rn //SetupComm(theApp.m_hSmsComm, 16384, 16384); /* 设置接收与发送的缓冲区大小 */ rn SetupComm(theApp.m_hSmsComm,512,512); /* 设置接收与发送的缓冲区大小 */ rnrn if(!SetCommState(m_hSmsComm, &dcb)) /* 设置串口的DCB */ rn rn //MessageBox(_T("无法按当前参数配置端口,请检查参数!")); rn ClosePort(); rn return FALSE; rn rn rn //设置超时参数 rn GetCommTimeouts(theApp.m_hSmsComm, &CommTimeOuts); rn CommTimeOuts.ReadIntervalTimeout = 100; /* 接收字符间最大时间间隔 */ rn CommTimeOuts.ReadTotalTimeoutMultiplier = 1; rn CommTimeOuts.ReadTotalTimeoutConstant = 100; /* 读数据总超时常量 */ rn CommTimeOuts.WriteTotalTimeoutMultiplier = 0; rn CommTimeOuts.WriteTotalTimeoutConstant = 0; rn if(!SetCommTimeouts(m_hSmsComm, &CommTimeOuts)) rn rn MessageBox(_T("无法设置超时参数!")); rn ClosePort(); rn return FALSE; rn rn rn PurgeComm(m_hSmsComm, PURGE_TXCLEAR | PURGE_RXCLEAR); /* 清除收/发缓冲区 */ rn return TRUE; rn 论坛

没有更多推荐了,返回首页