想简单实现一个SSO单点登陆的系统,就是用servlet来简单模拟一下。授权过程中的token之类的想放在
Ecache里面,然后就出现了上面的问题,service 中就直接报错
java.lang.ClassNotFoundException:
org.ehcache.config.builders.UserManagedCacheBuilder
而在测试中没问题。
maven 代码
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
Ecache 简单工具类代码
public class EcacheManage {
private static UserManagedCache<Object, Object> cache;
static {
init();
}
private static UserManagedCache<Object, Object> getCache() {
if (cache == null) {
init();
}
return cache;
}
private static void init() {
if (cache != null) {
return;
}
cache = UserManagedCacheBuilder.newUserManagedCacheBuilder(Object.class, Object.class).build(Boolean.TRUE);
}
public static Object getObject(Object key) {
return getCache().get(key);
}
public static void putObject(Object key, Object value) {
getCache().put(key, value);
}
public static void emptyEcache(){
getCache().close();
}
}
测试用例代码正常
public class EcacheTest {
public static void main(String[] args) {
EcacheManage.putObject("1", "1");
String test = (String)EcacheManage.getObject("1");
}
}
servlet 中service 就出错了
public class SecurityLoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String user = req.getParameter("user");
String password = req.getParameter("password");
String targetURL = req.getParameter("targetURL");
if (user.equals(password)) {
HttpSession session = req.getSession();
String loginToken = UUID.randomUUID().toString().replaceAll("-", "");
EcacheManage.putObject(loginToken, Boolean.TRUE);//此句报错
session.setAttribute("authenticate", loginToken);
resp.sendRedirect("authenticate?targetURL=" + targetURL);
} else {
resp.sendRedirect("index.jsp?targetURL=" + targetURL);
}
}
@Override
public void destroy() {
EcacheManage.emptyEcache();
}
不知道大家有没有遇到这种问题。
tomcat jar包冲突了吧或者jar包丢了,百度一下,答案很多的