Projede ihtiyaç oldu ve jQuery’nin kesin güzel bir numeric form input plug-ini vardır diye aradım ama istediğim gibi birşey bulamadım. Sonra birkaç araştırma/geliştirme/birleştirmeyle birlikte aşağıdaki plug-in ortaya çıktı. Kodlarını buradan download edebilirsiniz.
Yazar arşivleri: ddemirel
Spring Security UsernamePasswordAuthenticationFilter ile Validation/Navigation
Uygulamaya login olurken kullanıcının girmiş olduğu bilgileri kontrol etmek yada username/password dışında login esnasında bir bilgi alabilmek için UsernamePasswordAuthenticationFilter kullanabilirsiniz.
Örnek kullanım aşağıdaki gibidir. Aşağıda username ya da password boş ise BadCredentialsException hatası oluşuyor. Bu hatayı ExceptionMappingAuthenticationFailureHandler ile istediğiniz sayfaya yönlendirebilirsiniz.
<bean id=”authenticationFailureHandler” class=”org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler”>
<property name=”exceptionMappings”>
<props>
<prop key=”org.springframework.security.authentication.BadCredentialsException”>/login-failure.jsf?err=XXX</prop>
</props>
</property>
</bean>
<bean id=”twoFactorAuthenticationFilter” class=”com.sistek.udts.filter.ExUsernamePasswordAuthenticationFilter”>
<property name=”authenticationManager” ref=”authenticationManager” />
<property name=”authenticationSuccessHandler” ref=”authenticationSuccessHandler” />
<property name=”authenticationFailureHandler” ref=”authenticationFailureHandler” />
<property name=”filterProcessesUrl” value=”/j_spring_security_check” />
<property name=”postOnly” value=”false” />
</bean>
<sec:http>
……
<sec:custom-filter before=”FORM_LOGIN_FILTER” ref=”twoFactorAuthenticationFilter” />
……
</sec:http>
Zebra S4M Label Design ve Java ile Yazdırma
Zebra Designer Uygulaması Açılır ;
Finish’e tıklanır ve Printer Seçimi Yapılır;
Finishe tıklanır ve dizayna geçilir.
Dizayn işlemi bittikten sonra ZPL kodlarını almak için File menüsünden Print seçeneğine tıklanır.
Print to file seçilip Print butonuna tıklanır ve oluşan .prn uzantılı dosyayı text editörde açıp ilk satır hariç alarak dizaynın ZPL kodunu elde etmiş olursunuz.
Sonrasında ise bu ZPL kodunu printere göndermek için aşağıdaki Java örneğini inceleyebilirsiniz.
PrintUtil.java
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.PrintServiceAttribute;
import javax.print.attribute.standard.PrinterName;
import org.apache.commons.lang.StringUtils;
/**
* @author ddemirel [09/05/2013]
*/
public class PrintUtil {
public PrintUtil() {
super();
}
public void print(String data){
try {
PrintService psZebra = null;
String sPrinterName = null;
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++) {
PrintServiceAttribute attr = services[i].getAttribute(PrinterName.class);
sPrinterName = ((PrinterName) attr).getValue();
if (sPrinterName.toLowerCase().indexOf(“s4m”) >= 0) {
psZebra = services[i];
break;
}
}
if (psZebra == null) {
System.out.println(“Zebra printer is not found.”);
return;
}
DocPrintJob job = psZebra.createPrintJob();
String s = data;//”^XA^FO100,40^BY3^B3,,30^FD123ABC^XZ”;
byte[] by = s.getBytes();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(by, flavor, null);
job.print(doc, null);
} catch (PrintException e) {
e.printStackTrace();
}
}
public String printBobinLabel(String barcode,String bobinNo,String basNo,String bitNo) throws Exception {
String data = readFile(“bobin_label_template”);
if(!StringUtils.isEmpty(data)){
data = data.replaceAll(“#BARCODE#”, barcode);
data = data.replaceAll(“#BOBIN_NO#”, bobinNo);
data = data.replaceAll(“#BAS_NO#”, basNo);
data = data.replaceAll(“#BIT_NO#”, bitNo);
print(data);
} else throw new Exception(“Bobin label template dosyasi okunamadi!”);
return null;
}
public String printKoliLabel(String barcode,String koliNo) throws Exception {
String data = readFile(“koli_label_template”);
if(!StringUtils.isEmpty(data)){
data = data.replaceAll(“#BARCODE#”, barcode);
data = data.replaceAll(“#KOLI_NO#”, koliNo);
print(data);
} else throw new Exception(“Koli label template dosyasi okunamadi!”);
return null;
}
private String readFile(String name) {
String linesTmp = “”;
try {
InputStream is = PrintUtil.class.getResourceAsStream(“/label_template/”+name+”.txt”);
DataInputStream in = new DataInputStream(is);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
linesTmp += strLine;
}
in.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println(“Error: ” + e.getMessage());
}
return linesTmp;
}
}
Validation API için Custom Constraint Oluşturma
Girilen bilginin GSM numarası olup olmadığını basitçe anlayabilmek için aşağıdaki Constrainit kullanabiliriz;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy=SisGSMValidator.class)
public @interface SisGSM {
String message() default “Lütfen Geçerli Bir Cep Telefonu Giriniz!”;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
————————————————————————————————-
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.lang.StringUtils;
public class SisGSMValidator implements ConstraintValidator<SisGSM, String>{
private SisGSM sisGSM;
@Override
public void initialize(SisGSM sisGSM) {
this.sisGSM = sisGSM;
}
@Override
public boolean isValid(String string, ConstraintValidatorContext constraintValidatorContext) {
if (!StringUtils.isEmpty(string) && string.length() >= 2) {
String number = string.substring(0, 2);
if(number.equals(“50”) ||
number.equals(“53”) ||
number.equals(“54”) ||
number.equals(“55”) )
return true;
else return false;
} else return true;
}
}
————————————–
Kullanımı;
public class TempEntity {
@SisGSM(message = “{Validation.gecerliGsm}”)
private String gsmNo;
………………..
………………..
}