我看nutzbook中貌似没有这个登陆的方法了
@At
@Filters // 覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session
@POST
public Object login(@Param("username")String username,
@Param("password")String password,
@Param("captcha")String captcha,
@Attr(scope=Scope.SESSION, value="nutz_captcha")String _captcha,
HttpSession session) {
NutMap re = new NutMap();
if (!Toolkit.checkCaptcha(_captcha, captcha)) {
return re.setv("ok", false).setv("msg", "验证码错误");
}
int userId = userService.fetch(username, password);
if (userId < 0) {
return re.setv("ok", false).setv("msg", "用户名或密码错误");
} else {
session.setAttribute("me", userId);
// 完成nutdao_realm后启用.
// SecurityUtils.getSubject().login(new SimpleShiroToken(userId));
return re.setv("ok", true);
}
}
只有这个方法
@GET
@At("/login")
@Ok("jsp:jsp.user.login")
public void loginPage() {}
这个不是跳转到login.jsp页面的方法吗,我看这个登录页面中
$("#login_button").click(function () {
// 提交数据
$.ajax({
url: base + "/user/login",
type: "POST",
data: $('#loginForm').serialize(),
error: function (request) {
alert("Connection error");
},
dataType: "json",
success: function (data) {
if (data && data.ok) {
//alert("登陆成功");
window.location = base + "/home";
} else {
var emsg = data.msg;
if (emsg.substr(0, 3) == '验证码') {
var $captf = $('.with-captcha .md-text-field');
$captf.find('.err-tip').html(emsg);
$captf.addClass('has-err');
$captf.find('input').focus();
$captf.one('focusout', function () {
$captf.removeClass('has-err');
});
} else {
alert(emsg);
}
}
}
});
});
这个url不是有到了上面那个登陆页面的中转方法了吗,但是我测试的时候确实可以跳转到自定义的realm方法中
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
CaptchaUsernamePasswordToken upToken = (CaptchaUsernamePasswordToken) token;
if (Strings.isBlank(upToken.getCaptcha()))
throw new AuthenticationException("验证码不能为空");
String _captcha = Strings.sBlank(SecurityUtils.getSubject().getSession(true).getAttribute(Toolkit.captcha_attr));
if (!upToken.getCaptcha().equalsIgnoreCase(_captcha))
throw new AuthenticationException("验证码错误");
User user = dao().fetch(User.class, Cnd.where("name", "=", upToken.getUsername()));
if (user == null)
return null;
if (user.isLocked())
throw new LockedAccountException("Account [" + upToken.getUsername() + "] is locked.");
SimpleAccount account = new SimpleAccount(user.getId(), user.getPassword(), getName());
account.setCredentialsSalt(ByteSource.Util.bytes(user.getSalt()));
return account;
}
为什么第一次在地址栏输入user/login的时候是跳转到登陆页面,没有经过这个realm方法,点击登陆的时候这个地址却可以跳转到对应的realmz中啊 ,我自己试验的时候却出现了connection error的错误
配置如下
web.xml中