博客小系统(二)

本章目的实现登录功能

写完之后,遇到一个类似于org.apache.catalina.loader.WebappClassLoader validateJarFile的错误,原因基本上就是项目里servlet-api.jar和tomcat下lib中的servlet-api.jar有冲突。以前在myeclipse中好像是可以删除程序里的jar,但是idea中去掉pom.xml中servlet相关的包时,程序会出错,不能导入HttpRequest之类的包。后来通过idea里编辑module的Artifacts,去掉相关包,这样就可以了。


一.表

登录人员表,简单的信息。

CREATE TABLE `t_blogger` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `userName` varchar(50) DEFAULT NULL,
   `password` varchar(100) DEFAULT NULL,
   `profile` text,
   `nickName` varchar(50) DEFAULT NULL,
   `sign` varchar(100) DEFAULT NULL,
   `imageName` varchar(100) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

二.Model层

生成Blogger.java的model类。

三.DAO层

创建Interface,BloggerDao。提供getBlogger()方法查询blogger。

public interface BloggerDao {

    /**
     * 通过用户名查询用户
     * @param userName
     * @return
     */
    public Blogger getByUserName(String userName);
}

DAO层实现,BloggerMapper.xml

<span style="white-space:pre">	</span><resultMap type="Blogger" id="BloggerResult">
		<result property="id" column="id"/>
		<result property="userName" column="userName"/>
		<result property="password" column="password"/>
		<result property="profile" column="profile"/>
		<result property="nickName" column="nickName"/>
		<result property="sign" column="sign"/>
		<result property="imageName" column="imageName"/>
	</resultMap>

	<select id="getByUserName" parameterType="String" resultMap="BloggerResult">
		select * from t_blogger where userName=#{userName}
	</select>

四.Service层

创建interface,BloggerService.

创建class,BloggerServiceImpl 调用DAO层方法

@Service("bloggerService")
public class BloggerServiceImpl implements BloggerService{

    @Resource
    private BloggerDao bloggerDao;

    public Blogger getByUserName(String userName) {
        return bloggerDao.getByUserName(userName);
    }

}

五.Controller层

创建class,BloggerController。这里使用shiro作为权限认证。暂且写死登录人。这里暂且用的shiro验证,暂且不明白的,直接copy代码。以前应该是dao层直接根据user对象验证。这里也有个md5加密认证的过程,表里数据密码也是加密过后的。

@Controller
@RequestMapping("/blogger")
public class BloggerController {

	@Resource
	private BloggerService bloggerService;

	@RequestMapping("/login")
	public String login(Blogger blogger,HttpServletRequest request){
		Subject subject=SecurityUtils.getSubject();
		UsernamePasswordToken token=new UsernamePasswordToken(blogger.getUserName(), CryptographyUtil.md5(blogger.getPassword(), "admin"));
		try{
			subject.login(token); // 登录验证
			return "redirect:/admin/main.jsp";
		}catch(Exception e){
			e.printStackTrace();
			request.setAttribute("blogger", blogger);
			request.setAttribute("errorInfo", "用户名或者密码错误!");
			return "login";
		}
	}
}


六.Realm

这一节目前是不明白的,直接copy代码。

public class MyRealm extends AuthorizingRealm{

	@Resource
	private BloggerService bloggerService;

	/**
	 * 为当前的登录的用户角色和权限
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		return null;
	}

	/**
	 * 验证当前登录的用户
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		String userName=(String) token.getPrincipal();
		Blogger blogger=bloggerService.getByUserName(userName);
		if(blogger!=null){
			SecurityUtils.getSubject().getSession().setAttribute("currentUser", blogger); // 把当前用户信息存到session中
			AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(blogger.getUserName(), blogger.getPassword(), "xxx");
			return authcInfo;
		}else{
			return null;
		}
	}

}

七.View

login.jsp

main.jsp 显示登录人信息


八.小结

代码半抄半写,能够实现本节需求,登录成功。细节还需斟酌,主要是shiro验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值