Jeecms 源码剖析(3)

电脑杂谈  发布时间:2019-09-01 10:02:33  来源:网络整理

getSession().delete(entity);

return entity;

}

@SuppressWarnings(“unchecked”)

public T get(Serializable id) {

Assert.notNull(id);

return (T) getSession().get(getPersistentClass(), id);

}

@SuppressWarnings(“unchecked”)

public T load(Serializable id, boolean lock) {

Assert.notNull(id);

T entity = null;

if (lock) {

entity = (T) getSession().load(getPersistentClass(), id,

LockMode.UPGRADE);

} else {

entity = (T) getSession().load(getPersistentClass(), id);

}

return entity;

}

public List<T> findAll() {

return findByCriteria();

}

@SuppressWarnings(“unchecked”)

public List<T> findAll(OrderBy… orders) {

Criteria crit = createCriteria();

if (orders != null) {

for (OrderBy order : orders) {

crit.addOrder(order.getOrder());

}

}

return crit.list();

}

public Pagination findAll(int pageNo, int pageSize, OrderBy… orders) {

Criteria crit = createCriteria();

return findByCriteria(crit, pageNo, pageSize, null, OrderBy

.asOrders(orders));

}

在IMPL类:加:@Repository

在Action中:加:@Repository

目前对jeecms的事务还有点不知道,因为jeecms用了长期的注解:

@Service

@Transactional

publicclass FunctionMngImpl

@Autowired 是手动生成set方式:

@Autowired

private ContextPvd contextPvd;

则不用写set了,但get还要写。

<struts>

<include file=“com/jeecms/cms/struts-default.xml” />

<include file=“com/jeecms/cms/struts-core-admin.xml” />

<include file=“com/jeecms/cms/struts-core-ajax.xml” />

<include file=“com/jeecms/cms/struts-core-front.xml” />

</struts>

//struts-login.xml 登录

<package name=“cms.login” namespace=“/login” extends=“core-default”>

<global-results>

<result name=“logout” type=“redirectAction”>

<param name=“namespace”>/login</param>

jeecms 源码_jeecms教程_jeecms 源码

<param name=“actionName”>Jeecms</param>

</result>

<result name=“loginInput”>/WEB-INF/cms_sys/login.html</result>

</global-results>

<action name=“Jeecms” method=“loginInput” class=“cms.adminLoginAct”/>

<action name=“CmsLogout” method=“logout” class=“cms.adminLoginAct”/>

用使用annotation 自动注册bean spring整合Struts2的一种:

1, spring xml

<!– 使用annotation 自动登录bean,并检查@Required,@Autowired的属性已被注入 –>

<context:component-scan base-package=“com.lch.spring.auto” />

2, 在Struts2里面:

<action name=“auto” class=“into.autoSpringAction” method=“autoMethod” >

3,写一个接口,和一个实现类

publicinterface InterfaceTest {

@Repository

publicclass AutoImpl implements InterfaceTest{

3, 在Struts2中用@Controller @Autowrited

@Scope(“prototype”)

@Controller(“into.autoSpringAction”)

publicclass AutoSpringAction extends ActionSupport{

@Autowired

private InterfaceTest ift;

public String autoMethod(){

ift.sayHelloAuto();

returnSUCCESS;

}

如下面连set 都不用写,且spring后面没有Bean的配置用注解将接口和推动类装配进了。

以后台登陆为例:

:8080/jeecms/login/Jeecms.do //从后面可以知道是cms.adminLoginAct

这时Jeecms用注释来跳转的。如下

@Scope(“prototype”)

@Controller(“cms.adminLoginAct”)

publicclass AdminLoginAct extends JeeCoreAction {

<global-results>

<result name=“loginInput”>/WEB-INF/cms_sys/login.html</result>

</global-results>

Next:<action name=“CmsSubmit” method=“login” class=“cms.adminLoginAct”>

下面是登录设计:good

public String login() {

boolean isHuman = imageCaptchaService.validateResponseForID(contextPvd

.getSessionId(false), checkCode);

if (!isHuman) {

addActionError(“验证码错误!“);

return loginInput();

}

User user = userMng.authenticate(loginName, password);

if (user == null) {

addActionError(“用户名不存在或密码错误!“);

return loginInput();

}

Admin admin = adminMng.getByUserId(getWebId(), user.getId());

if (admin == null) {

addActionError(“您没有本站的管理权限!“);

return loginInput();

} elseif (admin.getAdminDisabled()) {

addActionError(“您的帐号已经被允许!“);

return loginInput();

}

// 清除以前登录信息

contextPvd.logout();

// 保存当前登录信息

contextPvd.setSessionAttr(User.USER_KEY, user.getId());

contextPvd.setSessionAttr(Admin.ADMIN_KEY, admin.getId());

userMng.updateLoginInfo(user);

// 将权限集放入session

Set<String> fiSet = functionMng.getFunctionItems(admin.getId());

contextPvd.setSessionAttr(Admin.RIGHTS_KEY, fiSet);

// 处理次级域名单点登录

Website web = getWeb();

if (!StringUtils.isBlank(web.getBaseDomain())) {

Cookie c = new Cookie(JSESSION_COOKIE, contextPvd

.getSessionId(false));

c.setPath(“/”);

c.setDomain(web.getTopDomain(true));

contextPvd.addCookie(c);

}

returnSUCCESS;

}

上面清除Session方法:

publicvoid logout() {

HttpSession session = ServletActionContext.getRequest().getSession(

false);

if (session != null) {

session.invalidate();

}

}

登录成功以后的跳转:这个很高:将开启另外一个namespace

<result name=“success” type=“redirectAction”>

<param name=“actionName”>Com_index</param>

<param name=“namespace”>/admin/cms</param>

</result>

进入这里


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-121307-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...