到目前为止我所研究的大多数人都说Apache Shiro易于使用且易于与CAS集成(用于SSO等).只是问一下是否有人有使用它们和使用哪一个的经验以及为什么一个比其他更好?
我在一个长期运行的应用程序中使用Apache Shiro 1.2.0,该应用程序从队列中读取消息并采取措施.所采取的操作需要一个Shiro身份验证会话,因此我实现了一个"ActAsAuthenticationToken"和自定义凭据匹配器,它允许我们只使用用户名登录.我正在使用DefaultSecurityManager,只有我的自定义领域和主题工厂注入.其他一切都应该是默认的.
在配置的时候,一切都运行良好一段时间,但是由于应用程序运行了很长时间(不是很长 - 就像一整天),每当我做任何需要会话的事情时,我就开始得到这个堆栈跟踪:
Caused by: org.apache.shiro.session.UnknownSessionException: There is no session with id [f5b7c3bf-2c53-40e9-a707-37f4265970aa]
at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170)
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236)
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222)
at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118)
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:105)
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupRequiredSession(AbstractNativeSessionManager.java:109)
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.getAttribute(AbstractNativeSessionManager.java:206)
at org.apache.shiro.session.mgt.DelegatingSession.getAttribute(DelegatingSession.java:141)
at org.apache.shiro.session.ProxiedSession.getAttribute(ProxiedSession.java:121)
at org.apache.shiro.session.ProxiedSession.getAttribute(ProxiedSession.java:121)
at org.apache.shiro.session.ProxiedSession.getAttribute(ProxiedSession.java:121)
at com.factorlab.security.FactorlabDelegatingSubject.getUser(FactorlabDelegatingSubject.java:34)
at com.factorlab.security.FactorlabDelegatingSubject.getUser(FactorlabDelegatingSubject.java:10)
at com.factorlab.persistence.AbstractEntityDao.getCurrentUser(AbstractEntityDao.java:227)
at com.factorlab.persistence.AbstractEntityDao.fireEvent(AbstractEntityDao.java:215)
at com.factorlab.persistence.AbstractEntityDao.saveOrUpdate(AbstractEntityDao.java:190)
at com.factorlab.persistence.AbstractEntityDao.saveOrUpdate(AbstractEntityDao.java:177)
at com.factorlab.persistence.AbstractEntityDao.saveOrUpdate(AbstractEntityDao.java:38)
at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy72.saveOrUpdate(Unknown Source)
at com.factorlab.observations.sales.OpportunityScoreUpdateServiceImpl.receiveOpportunityEvent(OpportunityScoreUpdateServiceImpl.java:83)
at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at …
Run Code Online (Sandbox Code Playgroud) 我有一个标准的HTML登录页面,我宁愿使用它而不是浏览器提供的标准HTTP身份验证弹出窗口.今天,我在登录后使用会话cookie跟踪会话,但我希望无状态并且每次都通过HTTP身份验证.我正在尝试的Web服务已经支持这一点,所以这是一个仅限浏览器的问题.
在jQuery中添加身份验证凭据是微不足道的,但我不知道如何保留它们.如果您从登录页面(jsp)转到主页(另一个jsp),您显然不会保留登录页面中的用户名和密码字段.我知道如果您从弹出窗口输入它们,某些浏览器将存储您的HTTP身份验证凭据,但我不知道它们是否在使用XHRRequest时被存储.如果他们这样做,浏览器之间是否有很多一致性?
此外,用户也需要能够"退出"应用程序.如果浏览器存储身份验证凭据,是否有办法使用JavaScript清除它们.
我觉得我不能成为第一个试图解决这个问题的人.是否有一些jQuery插件或已经处理过的东西?或者根本不可能做我想做的事情?
ajax jquery xmlhttprequest http-authentication stateless-session
我正在尝试使用@Configuration注释来连接我的应用程序,但我在其中一个初始化程序中不断获得NullPointerException,因为它引用的bean尚未初始化(我认为).我已经尝试在web.xml中指定'root'配置类,并尝试进行包扫描,似乎都不起作用.
抱歉,大代码转储. 我试图生成一组更简单的类来重现这个问题,但当然,当我这样做时,一切都运行良好. 这是我的课程(导入省略):
DataSourceConfig.java:
@Configuration
public class DataSourceConfig {
public DataSourceConfig() {
System.err.println("DataSourceConfig constructed...");
}
@Bean
public DataSource dataSource() {
BasicDataSource bean = new BasicDataSource();
bean.setDriverClassName("com.mysql.jdbc.Driver");
bean.setUrl("jdbc:mysql://localhost:3306/observation");
bean.setUsername("observation");
bean.setPassword("*******");
bean.setInitialSize(1);
bean.setMaxActive(5);
bean.setTestOnBorrow(true);
System.err.println("dataSource bean initialized: " + bean.toString());
return bean;
}
}
Run Code Online (Sandbox Code Playgroud)
HibernateConfig.java
@Configuration
@Import(DataSourceConfig.class)
public class HibernateConfig {
public HibernateConfig() {
System.err.println("HibernateConfig constructing...");
}
@Autowired
private DataSourceConfig dataSourceConfig;
@Bean
protected NamingStrategy namingStrategy() {
return new ImprovedNamingStrategy();
}
private AnnotationSessionFactoryBean sessionFactoryBean = null;
@Bean
@DependsOn("dataSourceConfig")
public AnnotationSessionFactoryBean sessionFactory() { …
Run Code Online (Sandbox Code Playgroud) 我意识到GWT使用的CSS解析器只会处理CSS2,但我的目标是iPhone Safari,所以我希望能够使用一些CSS3的东西.对于属性,我一直很好地使用literal
GWT提供的功能,但我遇到了CSS3选择器的问题 - 尤其是not()
伪类.
我有一点像这样的CSS:
.iMore:not (.__lod ):active {
color: #fff
}
Run Code Online (Sandbox Code Playgroud)
当GWT将此文件作为资源加载时,我得到:
遇到"(".期待其中一个:"{"","
该literal
函数适用于属性,但我试过这个:
.iMore:literal("not (.__lod )"):active {
color: #fff
}
Run Code Online (Sandbox Code Playgroud)
并得到一个不同的错误信息:
遇到""不是(.__ lod):"".期待其中一个:
<IDENT
>
我把literal
整个块放在一边,错误消息就消失了,但是如果没有@external
使用它的选择器中引用的所有内容(我在这个文件中有很多其他内容),我认为这样做不会有效.
我正在使用EhCache开发一个简单的缓存功能.有一个通用基类实现我的缓存接口(BECache):
public class EhCacheBase<K, V> implements BECache<K, V> {
private static CacheManager cacheManager;
private String cacheName;
public EhCacheBase(String cacheName) {
this.cacheName = cacheName;
}
public void cache(K key, V value) {
Cache cache = cacheManager.getCache(cacheName);
if (cache == null) {
throw new NullPointerException("Failed to obtain cache: " + cacheName);
}
Element element = new Element(key, value);
cache.put(element);
}
Run Code Online (Sandbox Code Playgroud)
目的是将缓存定义如下:
public class ObjectCache extends EhCacheBase<String, Object>{
public ObjectCache (String cacheName) {
super(cacheName);
}
}
Run Code Online (Sandbox Code Playgroud)
假设'cacheName'在ehcache.xml中定义,我得到了一个用于缓存某些对象的好类.
我正在尝试为'EhCacheBase.cache(...)'方法编写一个测试,以确保检索缓存并放置一个值(使用Mockito):
private static final String CACHE_NAME …
Run Code Online (Sandbox Code Playgroud) 我正在使用SpringSource Tool Suite(本质上是Eclipse Helios ++),我刚开始使用Subversive.我一直在使用Subversive以外的所有工具很长一段时间以前我从未见过这些红色箭头图标(或者这些被称为"装饰品"?),所以我怀疑Subversive是来源,但我不能找到任何符合他们意思的内容.
将ETag添加到HTTP响应时,是否应该包含媒体类型?当然,我知道ETag是不透明的,但这是一个例子:
显然,简单地返回304是不正确的,但我的问题是,在第二个请求中,我希望ETag匹配但是没有基于Accept标头(或内容标头)的缓存.此外,是否有可能缓存将具有来自同一URI的两个表示,或者每次切换Content-Type时是否总是会有无效缓存?
我是IntelliJ的新手,我看到一个启动提示,"任何工具窗口中的⎋键都会将焦点移动到编辑器上." 但是,我不知道⎋键是什么.我已经编程了很长时间.我的键盘上是否有可能这么多年来都错过了?
给定JSON结构如下:
{
"name":"Some Guy",
"emails":[
{
"description":"primary",
"status":"UNVERIFIED",
"email":"first@first-email.com"
},
{
"description":"home",
"status":"VERIFIED",
"email":"second@second-email.com"
},
{
"description":"away",
"status":"VERIFIED",
"email":"third@third-email.com"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要一个JSONPath表达式来获取第一封带有状态的电子邮件,VERIFIED
如果没有,那么只需获取数组中的第一封电子邮件.因此,鉴于上面的例子,结果将是second@second-email.com
.鉴于这个例子:
{
"name":"Some Guy",
"emails":[
{
"description":"primary",
"status":"UNVERIFIED",
"email":"first@first-email.com"
},
{
"description":"home",
"status":"UNVERIFIED",
"email":"second@second-email.com"
}
]
}
Run Code Online (Sandbox Code Playgroud)
结果将是first@first-email.com
.
这是否可以使用JSONPath表达式?