java-在命中“ / login” URL之前,未检测到用户正在登录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-在命中“ / login” URL之前,未检测到用户正在登录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2345字,纯文字阅读大概需要4分钟。
内容图文
![java-在命中“ / login” URL之前,未检测到用户正在登录](/upload/InfoBanner/zyjiaocheng/672/4cf65b80efcf48df9b22be3a9f03f311.jpg)
我正在使用Play!带有标准安全模块的框架.我所看到的是,当用户登录并检查记得我时,一切正常.如果他们关闭浏览器窗口,然后重新打开并返回该页面,则该用户将不再登录,但是如果他们转到默认的登录URL’/ login’,它将自动将其登录并重定向回首页用户正确显示为已登录状态.
用户必须点击登录网址以使网站检测到他们已登录,这是怎么回事?我是否在控制器中缺少某些功能来执行此操作?
这是有问题的控制器,以及我自定义的Security类:
public class Main extends Controller {
@Before
public static void checkUser() {
String user = Security.connected();
boolean connected = Security.isConnected();
renderArgs.put("isConnected", connected);
if (!connected) return;
User u = User.findUser(user);
String displayName = u.firstName + " " + u.lastName;
renderArgs.put("displayName", displayName);
}
public static void homePage() {
List<Testimonial> testimonials = Testimonial.findAll();
List<News> news = News.findAll();
Twitter twitter = new TwitterFactory().getInstance();
List<TweetView> tweets = new ArrayList<TweetView>();
try {
List<Status> result = twitter.getUserTimeline("atmospherian");
for (Status s: result) {
String source = s.getSource();
String content = s.getText();
tweets.add(new TweetView(source, content));
}
} catch (TwitterException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
if (tweets.size() > 0) {
tweets = tweets.subList(0, 3);
}
render(testimonials, news, tweets);
}
}
public class Security extends Secure.Security {
static boolean authenticate(String username, String password) {
User user = User.find("byEmail", username).first();
return user != null && user.password.equals(Crypto.passwordHash(password));
}
static boolean check(String profile) {
if ("admin".equals(profile)) {
return User.find("byEmail", connected()).<User>first().isAdmin;
}
return false;
}
}
解决方法:
现在,我们已经确定您不在此控制器上使用@With(Secure.class),我得到了一个不同的答案.在这种情况下,不会调用Secure的checkAccess方法.您可以将此方法添加到控制器中:
private static void loadCookieIfPresent() {
Http.Cookie remember = request.cookies.get("rememberme");
if (remember != null && remember.value.indexOf("-") > 0) {
String sign = remember.value.substring(0, remember.value.indexOf("-"));
String username = remember.value.substring(remember.value.indexOf("-") + 1);
if (Crypto.sign(username).equals(sign)) {
session.put("username", username);
}
}
}
并在您的checkUser方法的开头调用它以读取cookie,而无需强制登录.
内容总结
以上是互联网集市为您收集整理的java-在命中“ / login” URL之前,未检测到用户正在登录全部内容,希望文章能够帮你解决java-在命中“ / login” URL之前,未检测到用户正在登录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。